Дополнительно
Как преобразовывать строки в байтовые массивы UTF8 и обратно в Java
В Java у меня есть строка, и я хочу закодировать ее как массив байтов (в UTF8 или другой кодировке). Или же у меня есть массив байтов (в какой-то известной кодировке), и я хочу преобразовать его в строку Java. Как мне выполнить эти преобразования?
224
13
Преобразование из строки в байт[]:
Преобразование из байта[] в строку:
Разумеется, вы должны использовать правильное имя кодировки. В моих примерах использовались US-ASCII и UTF-8, две наиболее распространенные кодировки.
Здесь'ы решение, которое уклоняется от выполнения подстановки символов для каждого преобразования:
Вы можете конвертировать непосредственно через конструктор String(byte[], String) и метод getBytes(String). Java раскрывает доступные наборы символов через класс Charset. В документации JDK перечислены поддерживаемые кодировки.
В 90% случаев такие преобразования выполняются в потоках, поэтому вы используете классы Reader/Writer. Вы не будете инкрементально декодировать с помощью методов String произвольные байтовые потоки - вы оставите себя открытым для ошибок, связанных с многобайтовыми символами.
Моя реализация tomcat7 принимает строки в кодировке ISO-8859-1; несмотря на тип содержимого HTTP-запроса. Следующее решение работает для меня, когда пытаюсь правильно интерпретировать символы, такие как 'é' .
Когда пытается интерпретировать строку как US-ASCII, то байт информации было'т правильно интерпретированы.
В качестве альтернативы, StringUtils из общего Apache может быть использован.
или
Если у вас нестандартная кодировка, вы можете использовать getBytesUnchecked() или newString() соответственно.
Для того, чтобы расшифровать последовательность байтов в нормальную строку сообщения я, наконец, получил это работает с кодировкой UTF-8 с помощью этого кода:
При использовании 7-битной ASCII или ISO-8859-1 (Очень распространенный формат), то вы не'т иметь, чтобы создать новый Ява.яз.Строку на всех. Это'с гораздо более производительным, чтобы просто бросить байта на символ:
Полный рабочий пример:
Если вы не с использованием расширенная-символов как Ä, Æ, Å, Ç, Ï, Ê и можете быть уверены, что только передаются значения из первых 128 символов в Юникоде, то этот код также будет работать для UTF-8 и расширенного набора ASCII (как СР-1252).
Я могу'т комментарий, но Дон'т хотите, чтобы начать новый поток. Но это'т работать. Простой туда и обратно:
Я'd нужен б[] одном и том же массиве до и после кодирования, что это't (это относится к первому ответу).
ужасно поздно, но я просто сталкивался с этим вопросом и это мое решение: