Рубрики
Без рубрики

Кодируйте строку в UTF-8 на Java

Узнайте, как кодировать строку Java в набор символов UTF-8.

Автор оригинала: baeldung.

1. Обзор

Когда мы имеем дело с String в Java, иногда нам нужно кодировать их в определенную кодировку.

Дальнейшее чтение:

Руководство по кодировке символов

Руководство по кодированию/декодированию URL-адресов Java

Кодирование и декодирование Java Base64

Этот учебник представляет собой практическое руководство, показывающее различные способы кодирования Строки в кодировку UTF-8 ; для более технического глубокого погружения см. наше Руководство по кодировке символов .

2. Определение проблемы

To showcase the Java encoding, we’ll work with the German String “Развивайте с удовольствием”.

String germanString = "Entwickeln Sie mit Vergnügen";
byte[] germanBytes = germanString.getBytes();

String asciiEncodedString = new String(germanBytes, StandardCharsets.US_ASCII);

assertNotEquals(asciiEncodedString, germanString);

Эта Строка , закодированная с помощью US_ASCII, дает нам значение “Entwickeln Sich mit Vergn?gun” при печати, потому что она не понимает символ ü, не относящийся к ASCII|/. Но когда мы преобразуем кодированную ASCII Строку , которая использует все английские символы, в UTF-8, мы получаем ту же строку.

String englishString = "Develop with pleasure";
byte[] englishBytes = englishString.getBytes();

String asciiEncondedEnglishString = new String(englishBytes, StandardCharsets.US_ASCII);

assertEquals(asciiEncondedEnglishString, englishString);

Давайте посмотрим, что происходит, когда мы используем кодировку UTF-8.

3. Кодирование С Помощью Ядра Java

Давайте начнем с основной библиотеки.

String s неизменяемы в Java, что означает, что мы не можем изменить кодировку символов String . Чтобы достичь желаемого, нам нужно скопировать байты строки |, а затем создать новую с нужной кодировкой .

Сначала мы получаем Строку байт, а затем создаем новый, используя полученные байты и желаемую кодировку:

String rawString = "Entwickeln Sie mit Vergnügen";
byte[] bytes = rawString.getBytes(StandardCharsets.UTF_8);

String utf8EncodedString = new String(bytes, StandardCharsets.UTF_8);

assertEquals(rawString, utf8EncodedString);

4. Кодирование С Помощью Стандартных Наборов Символов Java 7

В качестве альтернативы мы можем использовать Стандартные наборы символов класс , представленный в Java 7 для кодирования Строки .

Во-первых, мы декодируем Строку в байты и, во-вторых, кодируем Строку в UTF-8:

String rawString = "Entwickeln Sie mit Vergnügen";
ByteBuffer buffer = StandardCharsets.UTF_8.encode(rawString); 

String utf8EncodedString = StandardCharsets.UTF_8.decode(buffer).toString();

assertEquals(rawString, utf8EncodedString);

5. Кодирование С Помощью Commons-Кодека

Помимо использования ядра Java, мы можем альтернативно использовать кодек Apache Commons для достижения тех же результатов.

Apache Commons Codec-это удобный пакет, содержащий простые кодеры и декодеры для различных форматов.

Во-первых, давайте начнем с конфигурации проекта. При использовании Maven мы должны добавить |/commons-кодек зависимость к вашему pom.xml :


    commons-codec
    commons-codec
    1.14

Тогда, в нашем случае, наиболее интересным классом является StringUtils , который предоставляет методы для кодирования String s. Используя этот класс, получить кодировку UTF-8 String довольно просто:

String rawString = "Entwickeln Sie mit Vergnügen"; 
byte[] bytes = StringUtils.getBytesUtf8(rawString);
 
String utf8EncodedString = StringUtils.newStringUtf8(bytes);

assertEquals(rawString, utf8EncodedString);

6. Заключение

Кодирование String в UTF-8 не сложно, но это не так интуитивно понятно. В этом учебном пособии представлены три способа сделать это: либо с помощью core Java, либо с помощью кодека Apache Commons.

Как всегда, примеры кода можно найти на GitHub .