java.util.Properties и Cp1250 - PullRequest
       77

java.util.Properties и Cp1250

3 голосов
/ 01 сентября 2009

Могу ли я использовать java.util.Properties с кодировкой, отличной от кодировки по умолчанию?

Ответы [ 3 ]

5 голосов
/ 01 сентября 2009

Да, но тогда вы должны быть осторожны, чтобы использовать load() и store() методы, которые принимают Reader / Writer, и явно создавать их используя InputStreamReader/OutputStreamWriter с правильной кодировкой.

Это может быть невозможно с библиотеками, которые неявно используют файлы свойств.

Редактировать: Описанные выше методы были введены только в Java 1.6 - для более старых версий вам не повезло, как писал dsadinoff.

3 голосов
/ 01 сентября 2009

Нет, если вы

  1. работает на Java 6 или более поздней версии
  2. контролирует код, загружающий файл свойств, и может использовать Reader. См. Javadoc .

Это довольно досадный недостаток в спецификации. Существует несколько обходных путей, возможно, самым простым из которых является автоматическое создание файла .properties, совместимого с экранированием Юникода, из соответствующего источника кодирования (cp1250, utf-8 и т. Д.).

Java поставляется с транскодером native2ascii , который сделает это за вас:

Есть несколько пожилых РСЕ по этому вопросу:

1 голос
/ 01 сентября 2009

Если ваш файл свойств доступен во время сборки, вы также можете преобразовать его в свой скрипт ant, используя задачу native2ascii:

<property name="javac.source.encoding" value="Cp1250"/>

<native2ascii src="${src.dir}" dest="${classes.dir}"
   encoding="${javac.source.encoding}"
   includes="**/*.properties"/>
...