logo

Kodowanie ciągów Java

W Javie, gdy mamy do czynienia z Strunowy czasami wymagane jest zakodowanie ciągu znaków w określonym zestawie znaków. Kodowanie to sposób na konwersję danych z jednego formatu na inny. Obiekty String używają kodowania UTF-16. Problem z UTF-16 polega na tym, że nie można go modyfikować. Istnieje tylko jeden sposób, w jaki można uzyskać inne kodowanie, tj. tablicę bajtów []. Sposób kodowania nie jest odpowiedni, jeśli otrzymamy nieoczekiwane dane. W tej części się dowiemy jak zakodować ciąg znaków Jawa .

Uwaga: Nie jest możliwe zakodowanie ciągu znaków w formacie UTF-8. Użyj więc ByteBuffer lub wywołaj na nim tablicę, aby uzyskać bajt [].

Zanim przejdziemy dalej w tej sekcji, musimy zrozumieć kodowanie znaków. Rzućmy okiem. Rozumiemy dlaczego musimy kodować ciąg znaków .

hashset vs hashmap

Kodowanie znaków to technika konwersji danych tekstowych na liczby binarne. Możemy przypisać unikalne wartości liczbowe do określonych znaków i przekonwertować te liczby na język binarny. Te liczby binarne można później przekonwertować z powrotem na oryginalne znaki w oparciu o ich wartości.

Problem

Załóżmy, że mamy ciąg niemiecki Do widzenia i wymagane jest jego zakodowanie. Rozważ następujący fragment kodu:

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

Jeśli kodujemy ciąg za pomocą US_ASCII, daje to Do widzenia ponieważ kodowanie US_ASCII nie rozumie znaków innych niż ASCII ( ty ). Kiedy konwertujemy ciąg zakodowany w ASCII na UTF-8, otrzymujemy ten sam ciąg.

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

Jeśli tablica byte[] zawiera tekst inny niż Unicode, możemy przekonwertować ten tekst na Unicode za pomocą Strunowy konstruktor. I odwrotnie, możemy również przekonwertować obiekt String na tablicę byte[] zawierającą znaki inne niż Unicode za pomocą String.getBytes() metoda. Zakodujmy ciąg za pomocą getBytes() metoda.

Korzystanie z metody String.getBytes().

Jawa Strunowy klasa zapewnia metodę getBytes(). który jest używany do kodowania ciągu znaków w formacie UTF-8. Metoda konwertuje ciąg znaków na sekwencję bajtów i przechowuje wynik w tablicy.

Składnia:

 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

Analizuje charsetName jako parametr i zwraca tablicę bajtów. Rzuca Nieobsługiwany wyjątek Encoding jeśli nazwany zestaw znaków nie jest obsługiwany.

Stwórzmy program w Javie, który konwertuje ciąg znaków na kodowanie 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+' '); } } } 

Wyjście:

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

Korzystanie z klasy StandardCharsets

Do zakodowania ciągu możemy także użyć klasy StandardCharset. Istnieją dwa kroki, aby zakodować ciąg. Najpierw zdekoduj ciąg znaków na bajty, a następnie zakoduj go w formacie UTF-8. Rozważmy na przykład następujący kod:

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

Innym sposobem kodowania ciągu jest użycie kodowania Base64. Kodowanie i dekodowanie Base64 omówimy w następnej sekcji.