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 .