logo

Кодування рядків Java

У Java, коли ми маємо справу з Рядок іноді потрібно закодувати рядок у певний набір символів. Кодування це спосіб перетворення даних з одного формату в інший. Рядкові об’єкти використовують кодування UTF-16. Проблема з UTF-16 полягає в тому, що його неможливо змінити. Існує лише один спосіб отримати інше кодування, тобто масив byte[]. Спосіб кодування не підходить, якщо ми отримуємо несподівані дані. У цьому розділі ми дізнаємося як закодувати рядок у Java .

hashset проти hashmap

Примітка. Неможливо закодувати рядок у UTF-8. Отже, використовуйте або ByteBuffer, або викликайте його масив, щоб отримати byte[].

Перш ніж рухатися далі в цьому розділі, ми повинні зрозуміти кодування символів. Давайте швидко подивимось. Давайте розберемося чому нам потрібно кодувати рядок .

Кодування символів це техніка для перетворення текстових даних у двійкові числа. Ми можемо призначити унікальні числові значення певним символам і перетворити ці числа в двійкову мову. Ці двійкові числа пізніше можна перетворити на вихідні символи на основі їхніх значень.

проблема

Припустимо, у нас є німецька струна до побачення і його потрібно закодувати. Розглянемо наступний фрагмент коду:

 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[] містить текст, відмінний від Юнікоду, ми можемо перетворити текст у Юнікод за допомогою Рядок конструктор. І навпаки, ми також можемо перетворити об’єкт 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. Наприклад, розглянемо такий код:

рядок до цілого числа java
 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 у наступному розділі.