logo

Java-merkkijonokoodaus

Java, kun käsittelemme merkkijono joskus on tarpeen koodata merkkijono tietyssä merkistössä. Koodaus on tapa muuntaa tiedot muodosta toiseen. Merkkijonoobjektit käyttävät UTF-16-koodausta. UTF-16:n ongelma on, että sitä ei voi muokata. On vain yksi tapa, jolla voidaan saada erilainen koodaus, eli tavu[]-taulukko. Koodaustapa ei sovellu, jos saamme odottamattomia tietoja. Tässä osiossa opimme kuinka koodataan merkkijono Java .

Huomautus: Merkkijonoa ei voi koodata UTF-8:lla. Joten käytä joko ByteBufferia tai kutsu siinä olevaa taulukkoa saadaksesi tavun [].

Ennen kuin siirrymme eteenpäin tässä osiossa, meidän on ymmärrettävä merkkikoodaus. Katsotaanpa nopeasti. Ymmärretään miksi meidän täytyy koodata merkkijono .

Merkkien koodaus on tekniikka tekstitietojen muuttamiseksi binääriluvuiksi. Voimme määrittää yksilöllisiä numeerisia arvoja tietyille merkeille ja muuntaa ne binäärikieleksi. Nämä binääriluvut voidaan myöhemmin muuntaa takaisin alkuperäisiksi merkeiksi niiden arvojen perusteella.

Ongelma

Oletetaan, että meillä on saksalainen jousi Hei hei ja se on koodattava. Harkitse seuraavaa koodinpätkää:

 String str = 'Tsch�ss'; byte[] bytesOfString = str.getBytes(); String encoded_String = new String(bytesOfString, StandardCharsets.US_ASCII); assertNotEquals(encoded_String, str); 

Jos koodaamme merkkijonon käyttämällä US_ASCII-koodia, se antaa Hei hei koska US_ASCII-koodaus ei ymmärrä ei-ASCII-merkkiä ( u ). Kun muunnamme ASCII-koodatun merkkijonon UTF-8:ksi, saamme saman merkkijonon.

 String str = 'GoodBye'; byte[] bytesOfString = str.getBytes(); String asciiEncondedEnglishString = new String(bytesOfString, StandardCharsets.US_ASCII); assertEquals(encoded_String, str); 

Jos tavu[]-taulukko sisältää ei-Unicode-tekstiä, voimme muuntaa tekstin Unicodeksi käyttämällä merkkijono rakentaja. Päinvastoin voimme myös muuntaa merkkijono-objektin tavu[]-joukoksi ei-Unicode-merkkejä String.getBytes() menetelmä. Koodataan merkkijono käyttämällä getBytes() menetelmä.

String.getBytes()-menetelmän käyttäminen

Java merkkijono luokkaa tarjoaa getBytes() -menetelmä jota käytetään koodaamaan s-merkkijono UTF-8:ksi. Menetelmä muuntaa merkkijonon tavujen sarjaksi ja tallentaa tuloksen taulukkoon.

Syntaksi:

 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

Se jäsentää parametrin charsetName parametriksi ja palauttaa tavutaulukon. Se heittää Ei tuettuEncodingException jos nimettyä merkistöä ei tueta.

Luodaan Java-ohjelma, joka muuntaa merkkijonon UTF-8-koodaukseen.

StringEncodingExample.java

 public class StringEncodingExample { public static void main(String args[]) throws Exception { //string to encode String str = 'Google Cloud'; //invokes the getBytes() method and stores an array of bytes into array[] byte array[] = str.getBytes('UTF8'); System.out.println('Encoded String: '); //enhanced for loop that iterates over the array for (byte x: array) { //prints the sequence of bytes System.out.print(x+' '); } } } 

Lähtö:

 Encoded String: 71 111 111 103 108 101 32 67 108 111 117 100 

StandardCharsets-luokan käyttäminen

Voimme myös käyttää StandardCharset-luokkaa merkkijonon koodaamiseen. Merkkijono koodataan kahdessa vaiheessa. Pura merkkijono ensin tavuiksi ja sitten UTF-8:ksi. Harkitse esimerkiksi seuraavaa koodia:

 String str = ' Tsch�ss'; ByteBuffer buffer = StandardCharsets.UTF_8.encode(str); String encoded_String = StandardCharsets.UTF_8.decode(buffer).toString(); assertEquals(str, encoded_String); 

Toinen tapa koodata merkkijono on käyttää Base64-koodausta. Keskustelemme Base64-koodauksesta ja dekoodauksesta seuraavassa osiossa.