logo

Java кодиране на низове

В Java, когато имаме работа с низ понякога се изисква да се кодира низ в определен набор от знаци. Кодиране е начин за конвертиране на данни от един формат в друг. Низовите обекти използват UTF-16 кодиране. Проблемът с UTF-16 е, че не може да се променя. Има само един начин, който може да се използва за получаване на различно кодиране, т.е. byte [] масив. Начинът на кодиране не е подходящ, ако получим неочаквани данни. В този раздел ще научим как да кодирате низ в Java .

Забележка: Не е възможно да се кодира низ в UTF-8. Така че, използвайте или ByteBuffer, или извикайте масив в него, за да получите байт [].

Преди да продължим напред в този раздел, трябва да разберем кодирането на знаци. Нека да разгледаме набързо. Да разберем защо трябва да кодираме низ .

Кодиране на знаци е техника за преобразуване на текстови данни в двоични числа. Можем да присвоим уникални числови стойности на конкретни знаци и да преобразуваме тези числа в двоичен език. Тези двоични числа по-късно могат да бъдат преобразувани обратно в оригинални знаци въз основа на техните стойности.

проблем

Да предположим, че имаме немски низ Чао и е необходимо да го кодирате. Разгледайте следния кодов фрагмент:

ограничения на електронното банкиране
 String str = 'Tsch�ss'; byte[] bytesOfString = str.getBytes(); String encoded_String = new String(bytesOfString, StandardCharsets.US_ASCII); assertNotEquals(encoded_String, str); 

Ако кодираме низа с помощта на US_ASCII, той дава Чао тъй като кодирането US_ASCII не разбира не-ASCII знака ( u ). Когато конвертираме ASCII кодиран низ в UTF-8, получаваме същия низ.

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

Ако масив byte[] съдържа не-Unicode текст, можем да преобразуваме текста в Unicode с низ конструктор. Обратно, можем също така да конвертираме String обект в byte[] масив от не-Unicode знаци с String.getBytes() метод. Нека кодираме низа с помощта на getBytes() метод.

Използване на метода String.getBytes().

Java низ клас осигурява getBytes() метод който се използва за кодиране на s низ в UTF-8. Методът преобразува низа в поредица от байтове и съхранява резултата в масив.

Синтаксис:

 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

Той анализира charsetName като параметър и връща байтовия масив. То хвърля UnsupportedEncodingException ако посоченият набор от знаци не се поддържа.

Нека създадем Java програма, която преобразува низ в 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+' '); } } } 

Изход:

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

Използване на клас StandardCharsets

Можем също да използваме класа StandardCharset, за да кодираме низа. Има две стъпки за кодиране на низа. Първо декодирайте низа в байтове и след това го кодирайте в UTF-8. Например, разгледайте следния код:

подготви се за тест mockito
 String str = ' Tsch�ss'; ByteBuffer buffer = StandardCharsets.UTF_8.encode(str); String encoded_String = StandardCharsets.UTF_8.decode(buffer).toString(); assertEquals(str, encoded_String); 

Друг начин за кодиране на низ е да използвате кодирането Base64. Ще обсъдим Base64 кодирането и декодирането в следващия раздел.