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

18

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

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

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

    
задан Aloong 11.11.2010 в 22:41
источник
  • Связанный stackoverflow.com/questions/361975/... –  Nikolay Shmyrev 05.05.2015 в 20:16

2 ответа

15

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

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.

    
ответ дан sleske 11.11.2010 в 22:55
  • СПАСИБО! Прежде чем использовать -Dfile.encoding, я попробовал новую строку (байты [], «UTF8»); возможно, не используя его везде, так что все еще не работает. Только сейчас я попробовал снова и добился успеха. –  Aloong 11.11.2010 в 23:13
  • @Aloong: Счастлив, это сработало для вас. Кстати, это «UTF-8», а не «UTF8». –  sleske 12.11.2010 в 02:18
0

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

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

Перейти к проекту & gt; & gt; & gt; Свойства & gt; Run & gt; & gt; & gt; VM Параметры и тип -Dfile. encoding=UTF-8

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

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

    

ответ дан Andrei 15.01.2018 в 09:25