V Javi, ko imamo opravka z Vrvica včasih je potrebno zakodirati niz v določen nabor znakov. Kodiranje je način za pretvorbo podatkov iz ene oblike v drugo. Objekti nizov uporabljajo kodiranje UTF-16. Težava z UTF-16 je, da ga ni mogoče spreminjati. Obstaja samo en način, ki ga je mogoče uporabiti za pridobitev drugačnega kodiranja, tj. niz byte []. Način kodiranja ni primeren, če dobimo nepričakovane podatke. V tem razdelku se bomo naučili kako zakodirati niz v Java .
Opomba: niza ni mogoče kodirati v UTF-8. Uporabite ByteBuffer ali pokličite matriko na njem, da dobite bajt[].
Preden nadaljujemo s tem razdelkom, moramo razumeti kodiranje znakov. Poglejmo na hitro. Razumejmo zakaj moramo kodirati niz .
Kodiranje znakov je tehnika za pretvorbo besedilnih podatkov v binarna števila. Določenim znakom lahko dodelimo edinstvene številske vrednosti in te številke pretvorimo v dvojiški jezik. Te binarne številke je mogoče pozneje pretvoriti nazaj v izvirne znake na podlagi njihovih vrednosti.
Težava
Recimo, da imamo nemški niz adijo in potrebno ga je kodirati. Razmislite o naslednjem delčku kode:
String str = 'Tsch�ss'; byte[] bytesOfString = str.getBytes(); String encoded_String = new String(bytesOfString, StandardCharsets.US_ASCII); assertNotEquals(encoded_String, str);
Če kodiramo niz z uporabo US_ASCII, dobi adijo ker kodiranje US_ASCII ne razume znaka, ki ni ASCII ( u ). Ko pretvorimo niz, kodiran z ASCII, v UTF-8, dobimo enak niz.
String str = 'GoodBye'; byte[] bytesOfString = str.getBytes(); String asciiEncondedEnglishString = new String(bytesOfString, StandardCharsets.US_ASCII); assertEquals(encoded_String, str);
Če matrika byte[] vsebuje besedilo, ki ni Unicode, lahko pretvorimo besedilo v Unicode z Vrvica konstruktor. Nasprotno pa lahko pretvorimo objekt String v matriko byte[] znakov, ki niso Unicode, z String.getBytes() metoda. Kodirajmo niz z uporabo getBytes() metoda.
Uporaba metode String.getBytes().
Java Vrvica razred zagotavlja metoda getBytes(). ki se uporablja za kodiranje niza s v UTF-8. Metoda pretvori niz v zaporedje bajtov in shrani rezultat v matriko.
Sintaksa:
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException
Razčleni charsetName kot parameter in vrne niz bajtov. Vrže UnsupportedEncodingException če imenovani nabor znakov ni podprt.
Ustvarimo program Java, ki pretvori niz v kodiranje UTF-8.
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+' '); } } }
Izhod:
Encoded String: 71 111 111 103 108 101 32 67 108 111 117 100
Uporaba razreda StandardCharsets
Za kodiranje niza lahko uporabimo tudi razred StandardCharset. Obstajata dva koraka za kodiranje niza. Najprej dekodirajte niz v bajte in ga nato kodirajte v UTF-8. Na primer, razmislite o naslednji kodi:
String str = ' Tsch�ss'; ByteBuffer buffer = StandardCharsets.UTF_8.encode(str); String encoded_String = StandardCharsets.UTF_8.decode(buffer).toString(); assertEquals(str, encoded_String);
Drug način za kodiranje niza je uporaba kodiranja Base64. O kodiranju in dekodiranju Base64 bomo razpravljali v naslednjem razdelku.