В Java у меня есть String, и я хочу закодировать его как байтовый массив (в UTF8 или в какой-либо другой кодировке). С другой стороны, у меня есть байтовый массив (в некоторой известной кодировке), и я хочу преобразовать его в строку Java. Как мне сделать эти преобразования?
java
string
encoding
character-encoding
mcherm
источник
источник
Вот решение, которое избегает выполнения поиска Charset для каждого преобразования:
источник
StandardCharsets.UTF_8
постоянный доступ к кодировке UTF-8.источник
Вы можете конвертировать напрямую через конструктор String (byte [], String) и метод getBytes (String). Java предоставляет доступные наборы символов через класс Charset . В документации JDK перечислены поддерживаемые кодировки .
В 90% случаев такие преобразования выполняются в потоках, поэтому вы должны использовать классы Reader / Writer . Вы не будете постепенно декодировать, используя методы String в произвольных байтовых потоках - вы оставите себя открытым для ошибок, связанных с многобайтовыми символами.
источник
UTF-8
, какова проблема с многобайтовыми символами?Моя реализация tomcat7 принимает строки как ISO-8859-1; несмотря на тип содержимого HTTP-запроса. Следующее решение помогло мне при попытке правильно интерпретировать символы, такие как «é».
При попытке интерпретировать строку как US-ASCII, информация байта не была правильно интерпретирована.
источник
StandardCharSets.UTF_8
иStandardCharSets.ISO_8859_1
.В качестве альтернативы можно использовать StringUtils от Apache Commons.
или
Если у вас нестандартная кодировка, вы можете использовать getBytesUnchecked () или newString () соответственно.
источник
Для декодирования серии байтов в обычное строковое сообщение я наконец-то начал работать с кодировкой UTF-8 с помощью этого кода:
источник
Если вы используете 7-битный ASCII или ISO-8859-1 (удивительно распространенный формат), то вам вообще не нужно создавать новую java.lang.String . Гораздо эффективнее просто преобразовать байт в символ:
Полный рабочий пример:
Если вы не используете расширенные символы, такие как Ä, Æ, Å, Ç, Ï, Ê и можете быть уверены, что единственными передаваемыми значениями являются первые 128 символов Unicode, то этот код также будет работать для UTF-8 и расширенного ASCII (например, CP-1252).
источник
Я не могу комментировать, но не хочу начинать новую тему. Но это не работает. Простое путешествие в оба конца:
Мне нужен b [] один и тот же массив до и после кодирования, которого нет (это относится к первому ответу).
источник
источник
источник
источник
ужасно поздно, но я только что столкнулся с этой проблемой, и это мое исправление:
источник