2011-12-07 4 views
1

Я пытаюсь читать японские значения строки из файла .properties с кодом:текст на японском языке в Java .Properties файл

Properties properties = new Properties(); 
InputStream in = MyClass.class.getResourceAsStream(fileName); 
properties.load(in); 

Проблема, по-видимому с выше код не распознает кодировку файла. Он читает только английские фрагменты и заменяет японские символы вопросительными знаками. Кстати, это не проблема с , отображающим Японский текст в Swing или чтение/запись UTF-8 кодированный файл .properties в редакторе. Обе вещи работают.

Является ли кодировка класса Properties-не знающим? Есть ли альтернатива, поддерживающая кодирование, которая не нарушает настройки менеджера безопасности, обычно находящиеся в апплетах?

+0

Вы видите это (_ читает только английские части и заменяет японские символы вопросительными знаками_) на консоли? – Santosh

ответ

3

load ожидает кодирования ISO 8859-1, так как noted in the docs.

В общем, вы захотите использовать native2ascii для преобразования файлов свойств, загрузки с помощью считывателя или использования XML, где вы можете указать кодировку.

+2

+1. Я думаю, что это проще всего загружать с помощью читателя: замените 'properties.load (in)' на 'properties.load (новый InputStreamReader (в,« UTF-8 »))' (или какую кодировку вы используете). –

+0

Благодаря Eli, добавление InputStreamReader - самое простое решение с минимальными изменениями в исходном коде. – esav1953

+0

Решение Dave с native2ascii.exe действительно работает, но оно добавляет еще одну операцию при редактировании файла .properties и необходимости хранить исходный файл в дополнение к файлу .properties. Использование читателя проще, как и было предложено. Я чувствую, что XML не является практичным в этом случае из-за дополнительной возможности вводить ошибки при ручном редактировании файла .properties, и, вероятно, сам код был бы более сложным, чем предыдущая альтернатива. – esav1953

3

На мой взгляд, вы должны преобразовать японский символ Java Unicode убегания строки

Например, это так, как я сделал с вьетнамского

Currency_Converter = Chuyen doi tien te 

Enter_Amount = Nh\u1eadp v\u00e0o s\u1ed1 l\u01b0\u1ee3ng 

Source_Currency = \u0110\u01a1n v\u1ecb g\u1ed1c 

Target_Currency = \u0110\u01a1n v\u1ecb chuy\u1ec3n 

Converted_Amount = K\u1ebft qu\u1ea3 

Convert = Chuy\u1ec3n \u0111\u1ed5i 

Alert_Mess = Vui l\u00f2ng nh\u1eadp m\u1ed9t s\u1ed1 h\u1ee3p l\u1ec7 

Alert_Title = Thong bao 
+0

Для этого есть хороший сайт: http://rishida.net/tools/conversion/ –

+0

@butchi Привет, когда я вхожу в файл Messages_vi_VN.properties, каждый ввод ключа в файл: в это преобразуется Convert = Chuy \ u1ec3n \ u0111 \ u1ed5i. Но мне нужен вход и показ во Вьетнаме. – iCrazybest

0

можно прочитать любой язык из файла свойств, вам нужно просто получить значение по ключу из файла свойств, а затем создать новую строку new String(keyValue.getBytes("ISO-8859-1"), "UTF-8"), то есть она создаст для вас строку UTF-8.

public static String getLocalizedPropertyValue(String fileName, String key, Locale locale) throws UnsupportedEncodingException { 
    Properties props = getPropertiesByLocale(fileName, locale); 
    String keyValue = props.getProperty(key); 
    return keyValue != null ? new String(keyValue.getBytes("ISO-8859-1"), "UTF-8") : ""; 
} 
Смежные вопросы