Установка кодировки символов Java по умолчанию? - PullRequest
331 голосов
/ 12 декабря 2008

Как правильно установить кодировку символов по умолчанию, используемую JVM (1.5.x) программно?

Я читал, что -Dfile.encoding=whatever раньше был подходом для старых JVM ... У меня нет такой роскоши по причинам, в которые я не пойду.

Я пробовал:

System.setProperty("file.encoding", "UTF-8");

И свойство устанавливается, но не похоже, что последний вызов getBytes ниже использует UTF8:

    System.setProperty("file.encoding", "UTF-8");

    byte inbytes[] = new byte[1024];

    FileInputStream fis = new FileInputStream("response.txt");
    fis.read(inbytes);
    FileOutputStream fos = new FileOutputStream("response-2.txt");
    String in = new String(inbytes, "UTF8");
    fos.write(in.getBytes());

Ответы [ 15 ]

1 голос
/ 16 декабря 2008

Непонятно, чем вы занимаетесь, и на данный момент у вас нет контроля. Если вы можете вставить другой класс OutputStream в целевой файл, вы можете использовать подтип OutputStream, который преобразует Strings в байты под определенным вами набором символов, скажем UTF-8 по умолчанию. Если модифицированного UTF-8 достаточно для ваших нужд, вы можете использовать DataOutputStream.writeUTF(String):

byte inbytes[] = new byte[1024];
FileInputStream fis = new FileInputStream("response.txt");
fis.read(inbytes);
String in = new String(inbytes, "UTF8");
DataOutputStream out = new DataOutputStream(new FileOutputStream("response-2.txt"));
out.writeUTF(in); // no getBytes() here

Если этот подход неосуществим, может помочь, если вы уточнить здесь, что именно вы можете и не можете контролировать с точки зрения потока данных и среды выполнения (хотя я знаю, что иногда это легче сказать, чем определить). Удачи.

0 голосов
/ 24 апреля 2018

Я использую Amazon (AWS) Elastic Beanstalk и успешно изменил его на UTF-8.

В Elastic Beanstalk перейдите в Конфигурация> Программное обеспечение, «Свойства среды». Добавьте (имя) JAVA_TOOL_OPTIONS с (значение) -Dfile.encoding = UTF8

После сохранения среда перезапустится с кодировкой UTF-8.

0 голосов
/ 14 октября 2017

Недавно я столкнулся с системой Notes 6.5 местной компании и обнаружил, что в веб-почте будут отображаться неидентифицируемые символы при установке Windows, не относящейся к Zhongwen. Вырыли несколько недель в Интернете, разобрались всего несколько минут назад:

В свойствах Java добавьте следующую строку в Параметры времени выполнения

-Dfile.encoding=MS950 -Duser.language=zh -Duser.country=TW -Dsun.jnu.encoding=MS950

Настройка UTF-8 в этом случае не будет работать.

0 голосов
/ 05 октября 2017

После комментария @Caspar к принятому ответу предпочтительный способ исправить это по Sun:

"измените локаль базовой платформы перед запуском вашей Java-программы."

http://bugs.java.com/view_bug.do?bug_id=4163515

Для докера см .:

http://jaredmarkell.com/docker-and-locales/

0 голосов
/ 19 января 2012

Мы устанавливаем два системных свойства вместе, и это заставляет систему принимать все в utf8

file.encoding=UTF8
client.encoding.override=UTF-8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...