У 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 у наступному розділі.