logo

Java kodiranje nizova

U Javi, kada se bavimo Niz ponekad je potrebno kodirati niz u određeni skup znakova. Kodiranje je način pretvaranja podataka iz jednog formata u drugi. String objekti koriste UTF-16 kodiranje. Problem s UTF-16 je taj što se ne može mijenjati. Postoji samo jedan način koji se može koristiti za dobivanje različitog kodiranja, tj. niz byte[]. Način kodiranja nije prikladan ako dobijemo neočekivane podatke. U ovom odjeljku naučit ćemo kako kodirati niz u Java .

Napomena: Nije moguće kodirati niz u UTF-8. Dakle, upotrijebite ili ByteBuffer ili pozovite niz na njemu da dobijete bajt[].

Prije nego nastavimo s ovim odjeljkom, moramo razumjeti kodiranje znakova. Pogledajmo na brzinu. Da se razumijemo zašto trebamo kodirati niz .

Kodiranje znakova je tehnika pretvaranja tekstualnih podataka u binarne brojeve. Možemo dodijeliti jedinstvene numeričke vrijednosti određenim znakovima i pretvoriti te brojeve u binarni jezik. Ovi binarni brojevi kasnije se mogu pretvoriti natrag u izvorne znakove na temelju njihovih vrijednosti.

Problem

Pretpostavimo da imamo njemački niz Pozdrav i potrebno ga je kodirati. Razmotrite sljedeći isječak koda:

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

Ako kodiramo niz pomoću US_ASCII, on daje Pozdrav jer US_ASCII kodiranje ne razumije ne-ASCII znak ( u ). Kada pretvorimo ASCII kodirani niz u UTF-8, dobivamo isti niz.

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

Ako niz byte[] sadrži tekst koji nije Unicode, možemo pretvoriti tekst u Unicode pomoću Niz konstruktor. Obrnuto, također možemo pretvoriti String objekt u niz byte[] ne-Unicode znakova s String.getBytes() metoda. Kodirajmo niz pomoću getBytes() metoda.

Korištenje metode String.getBytes().

Java Niz razreda pruža metoda getBytes(). koji se koristi za kodiranje s niza u UTF-8. Metoda pretvara niz u niz bajtova i pohranjuje rezultat u polje.

Sintaksa:

 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

Raščlanjuje charsetName kao parametar i vraća niz bajtova. To baca UnsupportedEncodingException ako imenovani skup znakova nije podržan.

Kreirajmo Java program koji pretvara niz u UTF-8 kodiranje.

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+' '); } } } 

Izlaz:

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

Korištenje klase StandardCharsets

Također možemo koristiti klasu StandardCharset za kodiranje niza. Postoje dva koraka za kodiranje niza. Prvo dekodirajte niz u bajtove, a zatim ga kodirajte u UTF-8. Na primjer, razmotrite sljedeći kôd:

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

Drugi način za kodiranje niza je korištenje Base64 kodiranja. O Base64 kodiranju i dekodiranju raspravljat ćemo u sljedećem odjeljku.