java.util.Properties и Cp1250
-
20-09-2019 - |
Вопрос
Могу ли я использовать java.util.Properties с кодировкой, отличной от стандартной?
Решение
Нет, если только ты
- используете Java 6 или более позднюю версию
- управлять кодом, загружающим файл свойств, и может использовать Reader.Видеть Javadoc.
Это довольно досадный недостаток спецификации.Существует несколько обходных путей, вероятно, самым простым из них является автоматическое создание файла .properties, совместимого с экранированием Юникода, из источника, подходящего для кодировки (cp1250, utf-8 и т. д.).
Java поставляется с транскодером под названием родной2ascii сделать это для вас:
На эту тему есть несколько старых RFE:
Другие советы
Да, но тогда нужно быть осторожным при использовании load()
и store()
методы, которые принимают Reader
/Writer
, и явно сконструировать их, используя InputStreamReader/OutputStreamWriter
с правильной кодировкой.
Это может быть невозможно с библиотеками, которые неявно используют файлы свойств.
Редактировать: Описанные выше методы были представлены только в Java 1.6 — со старыми версиями вам не повезло, как писал dsadinoff.
Если ваш файл свойств доступен во время сборки, вы также можете преобразовать его в свой скрипт ant, используя задачу Native2ascii:
<property name="javac.source.encoding" value="Cp1250"/>
<native2ascii src="${src.dir}" dest="${classes.dir}"
encoding="${javac.source.encoding}"
includes="**/*.properties"/>