2015-05-31 3 views
1

Я использую свойства для i18n. Если я указываю неанглийскую локаль:Как установить кодировку для пакета?

ResourceBundle messages = ResourceBundle.getBundle("i18n/Messages", new Locale("tr", "TR")); 

Я вижу сообщение с неверной кодировке:

ÐÑивеÑ! 

Как установить правильную кодировку?

+0

Какова кодировка вашего файла пакета? Как вы выводите это сообщение? –

+0

Кодировка UTF-8. Я печатаю его через 'System.out.println (title);' – JohnWinter

ответ

2

Проблема: По умолчанию кодировка символов ISO 8859-1 используется для чтения содержимого файла свойств, поэтому, если файл содержит любой символ за пределами ISO 8859-1, то он не будет обрабатываться должным образом.

Первое решение: Процесс свойства файла, чтобы иметь содержание с ISO 8859-1 кодировки символов с помощью native2ascii - Native-to-ASCII Converter

Что native2ascii делает: Он преобразует все 8859-1 не-ISO в их эквиваленте \ uXXXX. Это хороший инструмент, потому что вам не нужно искать эквивалент \ uXXXX специального символа.

Использование для UTF-8: native2ascii -encoding utf8 e:\a.txt e:\b.txt

Если вы используете Eclipse, то вы заметите, что она неявно преобразует специальный символ в \ иххого эквивалента. Попробуйте скопировать

会意 字/會意 字

в свойствах файла, открываемого в Eclipse.

Второго решения: Создание пользовательских ResourceBundle.Control класса, который может быть использован с ResourceBundle для чтения свойства в любой заданной схеме кодирования. Вы можете использовать уже созданный и общий CustomResourceBundleControl. Используйте его, как показано ниже:

ResourceBundle messages = ResourceBundle.getBundle("i18n/Messages", new CustomResourceBundleControl("UTF-8")); 
Смежные вопросы