Java dfile encoding utf 8

Я хотел бы знать, какова ценность свойства Java Virtual Machine (JVM), чтобы установить кодировку моего файла в UTF-8.

Я помещаю -Dfile.encoding=UTF8 или -Dfile.encoding=UTF-8 ?

См. здесь для определений.

Если при запуске Oracle HotSpot JDK 1.7.x на платформе Linux, где ваш язык предлагает UTF-8 (например, LANG=en_US.utf8 ), если вы не установите его в командной строке с помощью -Dfile.encoding , JDK будет по умолчанию file.encoding и по умолчанию Charset следующим образом:

. предлагая по умолчанию UTF-8 на такой платформе.

Кроме того, если java.nio.charset.Charset.defaultCharset() находит file.encoding не установленным, он ищет java.nio.charset.Charset.forName("UTF-8") , предполагая, что он предпочитает эту строку, хотя она хорошо сглажена, поэтому "UTF8" также будет работать нормально.

Если вы запускаете ту же программу на той же платформе с помощью java -Dfile.encoding=UTF8 , без hypen, она дает:

. отметив, что кодировка по умолчанию была канонизирована от UTF8 до UTF-8 .

309 [2008-12-12 08:31:00]

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

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

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

java utf-8 character-encoding

15 ответов

259 Решение erickson [2008-12-12 08:56:00]

К сожалению, свойство file.encoding должно указываться при запуске JVM; к моменту ввода вашего основного метода кодировка символов, используемая String.getBytes() и конструкторы по умолчанию InputStreamReader и OutputStreamWriter , была постоянно кэширована.

Как Эдуард Греч указывает, в специальном случае, подобном этому, переменную окружения JAVA_TOOL_OPTIONS можно использовать для указания этого свойства, но обычно это делается так

Charset.defaultCharset() будет отражать изменения в свойстве file.encoding , но большая часть кода в основных библиотеках Java, которые должны определять кодировку по умолчанию, не использует этот механизм.

Когда вы кодируете или декодируете, вы можете запросить свойство file.encoding или Charset.defaultCharset() , чтобы найти текущую кодировку по умолчанию, и использовать соответствующий метод или перегрузку конструктора, чтобы указать его.

Поскольку в командной строке не всегда можно получить доступ или изменить, например, во встроенных виртуальных машинах или просто виртуальных машинах, запущенных глубоко внутри скриптов, предоставляется переменная JAVA_TOOL_OPTIONS , позволяющая запускать агентов в этих случаях.

Установив переменную среды (Windows) JAVA_TOOL_OPTIONS на -Dfile.encoding=UTF8 , свойство (Java) System будет установлено автоматически при каждом запуске JVM. Вы узнаете, что параметр был поднят, потому что следующее сообщение будет отправлено на System.err :

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8

55 naskoos [2013-02-20 22:09:00]

У меня есть хакерский способ, который определенно работает!

Таким образом вы собираетесь обмануть JVM, который думал бы, что набор символов не установлен и заставит его снова установить его на UTF-8 во время выполнения!

Я думаю, что лучший подход, чем установка набора символов по умолчанию для платформы, особенно, поскольку у вас, похоже, есть ограничения на влияние на развертывание приложения, не говоря уже о платформе, можно назвать гораздо безопаснее String.getBytes("charsetName") . Таким образом, ваше приложение не зависит от того, что находится вне его контроля.

Я лично считаю, что String.getBytes() должен быть устаревшим, поскольку он вызвал серьезные проблемы в ряде случаев, которые я видел, когда разработчик не учитывал кодировку по умолчанию, возможно, меняющуюся.

Я не могу ответить на ваш первоначальный вопрос, но я хотел бы предложить вам несколько советов — не зависит от кодировки JVM по умолчанию. Всегда лучше явно указать желаемое кодирование (т.е. "UTF-8" ) в вашем коде. Таким образом, вы знаете, что он будет работать даже в разных системах и конфигурациях JVM.

How do I properly set the default character encoding used by the JVM (1.5.x) programmatically?

I have read that -Dfile.encoding=whatever used to be the way to go for older JVMs. I don’t have that luxury for reasons I wont get into.

And the property gets set, but it doesn’t seem to cause the final getBytes call below to use UTF8:

16 Answers 16

Unfortunately, the file.encoding property has to be specified as the JVM starts up; by the time your main method is entered, the character encoding used by String.getBytes() and the default constructors of InputStreamReader and OutputStreamWriter has been permanently cached.

As Edward Grech points out, in a special case like this, the environment variable JAVA_TOOL_OPTIONS can be used to specify this property, but it’s normally done like this:


[an error occurred while processing the directive]
Карта сайта