Как заставить jar использовать (или jvm, в котором работает jar) utf-8 вместо кодировки по умолчанию - PullRequest
21 голосов
/ 12 ноября 2010

Кодировка по умолчанию для моей Windows - GBK, а мой Eclipse полностью кодирован в формате utf-8.
Так что приложение, которое хорошо работает в моем Eclipse, вылетает, потому что слова становятся нечитаемыми при экспорте в виде файла JAR;
Я должен написать следующую строку в файле .bat, чтобы запустить приложение

   start java -Dfile.encoding=utf-8 -jar xxx.jar    

Теперь мой вопрос заключается в том, могу ли я написать что-то в исходном коде, чтобы установить, что приложение использует (или jvm запускается) utf-8 вместо системной кодировки по умолчанию.

Ответы [ 2 ]

16 голосов
/ 12 ноября 2010

Когда вы открываете файл для чтения, вам нужно явно указать кодировку, которую вы хотите использовать для чтения файла:

Reader r = new InputStreamReader(new FileInputStream("myfile"), StandardCharsets.UTF_8);

Тогда значение кодировки платформы по умолчанию (которую можно изменить с помощью -Dfile.encoding) больше не имеет значения.

Примечание:

Я бы обычно рекомендовал всегда указывать кодировку явно для любой операции, которая зависит от стандартной локали, такой как ввод / вывод символов. Многие методы Java API по умолчанию используют кодировку платформы, что я считаю плохим дизайном, потому что часто кодировка платформы не является правильной, плюс она может внезапно измениться (если пользователь, например, переключает язык ОС), нарушая работу вашего приложения.

Так что всегда говорите, какую кодировку вы хотите.

В некоторых случаях правильная кодировка платформы (например, при открытии файла, который пользователь только что создал для вас), но они довольно редки.

Примечание 2:

java.nio.charset.StandardCharsets была введена в Java 1.7. Для более старых версий Java вам необходимо указать входную кодировку в виде строки (тьфу). Список возможных кодировок зависит от JVM, но каждая JVM, как минимум, гарантированно имеет:

US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE, UTF-16.

0 голосов
/ 15 января 2018

Есть другой способ.Если вы уверены, что хотите кодировать ввод и вывод, вы можете сохранить настройки до компиляции файла JAR.

Вот пример для NetBeans.

Перейти к проекту >> Свойства >> Выполнить >> Параметры виртуальной машины и введите -Dfile. encoding=UTF-8

После этого все кодируется в UTF-8 каждый раз при запуске виртуальной машины Java.

(Я думаю, что Eclipse предлагает такую ​​же возможность. Если нет, просто зайдите в Google Options.)

enter image description here

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