Как убедиться, что Java-программа использует кодировку UTF-8 - PullRequest
7 голосов
/ 07 июня 2010

Я недавно обнаружил, что использование кодировки JVM по умолчанию вызывает ошибки.Я должен явно использовать конкретную кодировку ex. UTF-8 при работе с String, InputStreams и т. Д. У меня есть огромная база кода для сканирования, чтобы убедиться в этом.Может ли кто-нибудь предложить мне более простой способ проверить это, чем поиск по всей базе кода.

Спасибо, Найн

Ответы [ 4 ]

4 голосов
/ 07 июня 2010
System.getProperty("file.encoding")

возвращает кодировку виртуальной машины для операций ввода-вывода

Вы можете установить ее, передав -Dfile.encoding=utf-8

3 голосов
/ 07 июня 2010

Не прямой ответ, но для облегчения работы полезно знать, что в немного приличной IDE вы можете просто искать для использованных случаев InputStreamReader, OutputStreamWriter, String#getBytes(), String(byte[]), Properties#load(), URLEncoder#encode(), URLDecoder#decode() и супругов, в которых вы можете передать кодировку, а затем обновить соответствующим образом. Вы также хотели бы найти FileReader и FileWriter и заменить их первыми двумя упомянутыми классами. Правда, это утомительное занятие, но оно того стоит, и я бы предпочел, чтобы оно больше зависело от конкретных особенностей.

Например, в Eclipse выберите интересующий вас проект (ы), нажмите Ctrl + H , перейдите на вкладку Поиск Java , введите, например, InputStreamReader, установите флажок Поиск Конструктор , выберите Источники в качестве единственной опции Поиск в и выполните поиск.

0 голосов
/ 07 июня 2010

Если файл обрабатывается встроенными инструментами на серверах, может потребоваться установить кодировку System.getProperty («file.encoding») Я столкнулся с ошибками в обоих направлениях.

Рекомендуется знать, какой набор символов используется, и установить его. Также, если файл используется для взаимодействия с другим приложением, вы должны определить используемый набор символов. Это может быть кодовая страница Windows или другой формат UTF.

0 голосов
/ 07 июня 2010

полагаясь на кодировку JVM по умолчанию вызывает ошибки

Действительно, при кодировании / декодировании всегда следует указывать кодировку.

Если вас устраивает глобальная кодировка по умолчанию для всего, что вы кодируете / декодируете (не всегда достаточно), вы можете согласиться с ответом Божо: укажите известное фиксированное значение по умолчанию в аргументах JVM или в некотором статическом инициализаторе.

Но хорошей практикой является поиск всех неявных спецификаций наборов символов в вашем коде и замена их на явную кодировку наборов символов: некоторые типичные методы / классы, на которые следует обратить внимание: FileWriter, FileReader, InputStreamReader, OutputStreamWriter , String#getBytes(), String(byte[]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...