Java строка в массив байтов, без специального символа § - PullRequest
0 голосов
/ 02 августа 2020

Мне нужно преобразовать строку с символом «§» в байтовый массив и обратно в строку. Я заметил, что все «§» были заменены на «?».

I tried it with encoding:
new String(message.getBytes("ISO-8859-1"))
new String(message.getBytes("UTF8"))
new String(message.getBytes("UTF16"))

и не получили ту же строку обратно.

Отредактировано:

проблема возникает во время выполнения UTs. Решается либо запуском с:

export JAVA_TOOL_OPTIONS="$JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8"

, либо добавлением

<configuration>
   <argLine>-Dfile.encoding=UTF-8</argLine>
</configuration>

в плагин surefire

1 Ответ

0 голосов
/ 02 августа 2020

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

new String(message.getBytes("ISO-8859-1"), "ISO-8859-1")

Было бы лучше (работает быстрее, меньше возможностей для ошибок) указать кодировку как объект Charset, а не как строку. Например, в этом случае вы можете использовать StandardCharsets.ISO_8859_1.

...