- Конвертация Unicode в UTF-8 в Java
- Объявление
- Пример 1
- Итог
- Описание
- Пример 2
- Итог
- Закодируйте строку в UTF-8 на Java
- Вступление
- Использование метода getBytes()
- Кодируйте строку в UTF-8 с помощью стандартных наборов символов Java 7
- Git Essentials
- Закодируйте строку в UTF-8 с помощью Apache Commons
- Вывод
- Читайте ещё по теме:
- UTF8 Encode
- Categories
- Input
- Output
- What is UTF8 Encoder?
- What is the full form of UTF-8?
- What is the purpose of UTF-8 Encoder?
- How does UTF-8 Encoder work?
- How to encode to UTF-8?
- Try LambdaTest Now !!
Конвертация Unicode в UTF-8 в Java
Unicode – это международный стандарт кодировки символов, который может представлять большинство письменных языков по всему миру. Юникод использует шестнадцатеричное для представления символа. Unicode – это 16-битная система кодирования символов. Наименьшее значение равно \ u0000, а самое высокое значение равно \ uFFFF.
UTF-8 – кодировка символов переменной ширины. UTF-8 может быть сжатым как ASCII, но также может содержать любые символы Юникода с некоторым увеличением размера файла. UTF расшифровывается как Unicode Transformation Format. «8» означает, что он выделяет 8-битные блоки для обозначения символа. Количество блоков, необходимых для представления символа, варьируется от 1 до 4.
Чтобы конвертировать Unicode в UTF-8 в Java, мы используем метод getBytes(). Он кодирует строку в последовательность байтов и возвращает массив байтов.
Объявление
Метод getBytes() объявляется следующим образом.
public byte[] getBytes(String charsetName)
где charsetName – это конкретный набор символов, с помощью которого String кодируется в массив байтов.
Давайте посмотрим программу для преобразования Unicode в UTF-8 в Java с использованием метода getBytes().
Пример 1
public class Example < public static void main(String[] args) throws Exception < String str1 = "\u0000"; String str2 = "\uFFFF"; byte[] arr = str1.getBytes("UTF-8"); byte[] brr = str2.getBytes("UTF-8"); System.out.println("UTF-8 for \\u0000"); for(byte a: arr) < System.out.print(a); >System.out.println("\nUTF-8 for \\uffff" ); for(byte b: brr) < System.out.print(b); >> >
Итог
UTF-8 for \u0000 0 UTF-8 for \uffff -17-65-65
Описание
String str1 = "\u0000"; String str2 = "\uFFFF";
- Строка str1 назначается \ u0000, что является самым низким значением в Юникоде. Строке str2 присваивается значение \ uFFFF, которое является самым высоким значением в Юникоде.
- Чтобы преобразовать их в UTF-8, мы используем метод getBytes(“UTF-8”). Это дает нам массив байтов следующим образом –
byte[] arr = str1.getBytes("UTF-8"); byte[] brr = str2.getBytes("UTF-8");
for(byte a: arr) < System.out.print(a); >for(byte b: brr)
- Чтобы преобразовать UTF-8 в Unicode, мы создаем объект String, который имеет параметры в качестве имени массива байтов UTF-8, а charset – массив байтов, которым он является, то есть в UTF-8.
Пример 2
Давайте посмотрим программу для преобразования UTF-8 в Unicode путем создания нового объекта String.
Итог
Сначала мы преобразовали данную строку Unicode в UTF-8 для последующей проверки с помощью метода getBytes() –
String str = "hey\u6366"; byte[] charset = str.getBytes("UTF-8")
Затем мы преобразовали байтовый массив charset в Unicode, создав новый объект String следующим образом:
String result = new String(charset, "UTF-8"); System.out.println(result);
Средняя оценка 4.1 / 5. Количество голосов: 9
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Видим, что вы не нашли ответ на свой вопрос.
Напишите комментарий, что можно добавить к статье, какой информации не хватает.
Закодируйте строку в UTF-8 на Java
В этом уроке мы рассмотрим, как кодировать строку в UTF-8 на Java – с помощью стандартных наборов символов, getBytes() с помощью ByteBuffer и Apache Commons с примерами.
Вступление
При работе со строками | в Java нам часто приходится кодировать их в определенную кодировку, такую как UTF-8 .
UTF-8 представляет собой кодировку символов переменной ширины, которая использует от одного до четырех восьмибитных байтов для представления всех допустимых кодовых точек Юникода .
Кодовая точка может представлять отдельные символы, но также иметь другие значения, например, для форматирования. “Переменная ширина” означает, что он кодирует каждую кодовую точку с разным количеством байтов (от одного до четырех), и в качестве меры экономии места обычно используемые кодовые точки представлены меньшим количеством байтов, чем те, которые используются реже.
UTF-8 использует один байт для представления кодовых точек из 0-127 , сделав первый 128 код указывает взаимно однозначную карту с символами ASCII, поэтому UTF-8 обратно совместим с ASCII.
Примечание: Java кодирует все строки в UTF-16, который использует минимум два байта для хранения кодовых точек. Зачем тогда нам нужно было бы конвертировать в UTF-8?
Не все входные данные могут быть UTF-16, или UTF-8, если на то пошло. На самом деле вы можете получить строку в кодировке ASCII, которая поддерживает не так много символов, как UTF-8. Кроме того, не все выходные данные могут обрабатывать UTF-16, поэтому имеет смысл преобразовать в более универсальный UTF-8.
Мы будем работать с несколькими Строками , которые содержат символы Юникода , с которыми вы, возможно, не сталкиваетесь ежедневно, такие как č , β и あ , имитирующие ввод данных пользователем.
Давайте выпишем пару строк:
String serbianString = "Šta radiš?"; // What are you doing? String germanString = "Wie heißen Sie?"; // What's your name? String japaneseString = "よろしくお願いします"; // Pleased to meet you.
Теперь давайте воспользуемся Строкой(байт[] байт, кодировка кодировки) конструктором строки, чтобы воссоздать эти строки, но с другой кодировкой , имитирующей ввод ASCII , который поступил к нам в первую очередь:
String asciiSerbianString = new String(serbianString.getBytes(), StandardCharsets.US_ASCII); String asciigermanString = new String(germanString.getBytes(), StandardCharsets.US_ASCII); String asciijapaneseString = new String(japaneseString.getBytes(), StandardCharsets.US_ASCII); System.out.println(asciiSerbianString); System.out.println(asciigermanString); System.out.println(asciijapaneseString);
Как только мы создадим эти строки и закодируем их в виде символов ASCII, мы сможем их распечатать:
В то время как первые две строки содержат всего несколько символов, которые не являются допустимыми символами ASCII, последняя строка не содержит никаких .
Чтобы избежать этой проблемы, мы можем предположить, что не все входные данные уже могут быть закодированы по нашему вкусу – и закодировать их, чтобы самим решить такие случаи. Существует несколько способов кодирования строки в UTF-8 на Java.
Кодирование строки в Java просто означает ввод определенных байтов в массив байтов, который представляет собой строку, предоставляя дополнительную информацию, которую можно использовать для ее форматирования, как только мы сформируем экземпляр String .
Использование метода getBytes()
Класс String , состоящий из байтов, естественно, предлагает метод getBytes () , который возвращает массив байтов, используемый для создания строки. Поскольку кодирование на самом деле просто манипулирует этим массивом байтов, мы можем поместить этот массив через | кодировку , чтобы сформировать его при получении данных.
По умолчанию, без указания кодировки , байты кодируются с использованием платформы по умолчанию Кодировки – которая может не быть UTF-8 или UTF-16. Давайте возьмем байты строки и распечатаем их:
String serbianString = «Šta radiš?»; // What are you doing? byte[] bytes = serbianString.getBytes(StandardCharsets.UTF_8); for (byte b : bytes)
-59 -96 116 97 32 114 97 100 105 -59 -95 63
Это кодовые точки для наших закодированных символов, и они не очень полезны для человеческих глаз. Хотя, опять же, мы можем использовать конструктор String для создания удобочитаемой строки из этой самой последовательности. Учитывая тот факт , что мы закодировали этот массив байтов в UTF_8 , мы можем продолжить и безопасно создать новую строку из этого:
String utf8String = new String(bytes); System.out.println(utf8String);
Примечание: Вместо того, чтобы кодировать их с помощью метода getBytes () , вы можете также кодировать байты с помощью конструктора строк:
String utf8String = new String(bytes, StandardCharsets.UTF_8);
Теперь выводится та же самая строка, с которой мы начали, но закодированная в UTF-8:
Кодируйте строку в UTF-8 с помощью стандартных наборов символов Java 7
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Начиная с Java 7 , мы познакомились с классом Стандартные наборы символов , в котором доступно несколько наборов символов , таких как US_ASCII , ISO_8859_1 , UTF_8 и UTF-16 среди прочих.
Каждая Кодировка имеет кодирование() и декодирование() метод, который принимает Буфер символов (который реализует последовательность символов , такую же, как Строка ). С практической точки зрения – это означает, что мы можем вставить строку в encode() методы кодировки .
Метод encode() возвращает ByteBuffer , который мы можем легко снова превратить в строку.
Ранее, когда мы использовали наш метод getBytes () , мы сохраняли полученные байты в массиве байтов, но при использовании класса StandardCharsets все немного по-другому. Сначала нам нужно использовать класс ByteBuffer для хранения наших байтов. Затем нам нужно как кодировать , так и декодировать обратно наши недавно выделенные байты. Давайте посмотрим, как это работает в коде:
String japaneseString = "よろしくお願いします"; // Pleased to meet you. ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(japaneseString); String utf8String = new String(byteBuffer.array(), StandardCharsets.UTF_8); System.out.println(utf8String);
Выполнение этого кода приводит к:
Закодируйте строку в UTF-8 с помощью Apache Commons
Пакет кодеков Apache Commons содержит простые кодеры и декодеры для различных форматов, таких как Base64 и Шестнадцатеричный . В дополнение к этим широко используемым кодерам и декодерам, пакет кодеков также поддерживает набор утилит фонетического кодирования .
Чтобы мы могли использовать кодек Apache Commons, нам нужно добавить его в наш проект в качестве внешней зависимости.
Используя Maven, давайте добавим зависимость commons-кодек в ваш pom.xml файл:
commons-codec commons-codec 1.15
В качестве альтернативы, если вы используете Gradle:
compile 'commons-codec:commons-codec:1.15'
Теперь мы можем использовать служебные классы Apache Commons – и, как обычно, мы будем использовать класс StringUtils .
Это позволяет нам преобразовывать строки в байты и из байтов, используя различные кодировки, требуемые спецификацией Java. Этот класс является нулевым и потокобезопасным, поэтому у нас есть дополнительный уровень защиты при работе со строками.
Для кодирования строки в UTF-8 с помощью класса StringUtils Apache Common мы можем использовать метод getBytes Utf 8 () , который работает так же, как метод getBytes() с указанной кодировкой :
String germanString = "Wie heißen Sie?"; // What's your name? byte[] bytes = StringUtils.getBytesUtf8(germanString); String utf8String = StringUtils.newStringUtf8(bytes); System.out.println(utf8String);
Или , вы можете использовать обычный StringUtils класс из commons-lang3 зависимости:
org.apache.commons commons-lang3
Если вы используете Gradle:
implementation group: ‘org.apache.commons’, name: ‘commons-lang3’, version: $
И теперь мы можем использовать почти тот же подход, что и с обычными строками:
String germanString = "Wie heißen Sie?"; // What's your name? byte[] bytes = StringUtils.getBytes(germanString, StandardCharsets.UTF_8); String utf8String = StringUtils.toEncodedString(bytes, StandardCharsets.UTF_8); System.out.println(utf8String);
Благодаря этому подход является потокобезопасным и нулевым:
Вывод
В этом уроке мы рассмотрели как кодировать строку Java в UTF-8 . Мы рассмотрели несколько подходов – ручное создание строки с использованием getBytes() и управление ими, класс Java 7 Стандартные наборы символов , а также Apache Commons.
Читайте ещё по теме:
UTF8 Encode
The UTF-8 encoding system is a variable-width character encoding standard for electronic communication.
Categories
Input
Output
What is UTF8 Encoder?
UTF-8 is an encoding system for Unicode that can translate any Unicode character to a matching unique binary string and vice versa.
What is the full form of UTF-8?
The full form of UTF-8 is Unicode Transformation Format in 8-bit format. UTF-8 is a character encoding standard that employs 8-bit code units to represent Unicode characters.
What is the purpose of UTF-8 Encoder?
The purpose of a UTF-8 Encoder is to encode characters using 8-bit code units to represent Unicode characters. It enables more efficient use of storage space for the text containing a blend of ASCII and non-ASCII characters.
How does UTF-8 Encoder work?
Unicode Transformation Format 8 (UTF-8) is a character encoding scheme. It replaces each character in an earlier Unicode scheme with a string of binary digits that represent the character’s numeric code point. Then, the same binary digits can be converted back into the original character.
How to encode to UTF-8?
There are various methods to encode text to UTF-8. Some common methods include using built-in functions of programming languages like Java, and Python, using third-party libraries, or free online UTF-8 Encoders.
Try LambdaTest Now !!
Get 100 minutes of automation test minutes FREE!!