вторник, 22 сентября 2009 г.

Русские буквы в файлах *.property

Вот встала проблема. Русский текст из файла property считывался кракозябрами.Google выдал следующие:

Русские буквы в файлах properties
Для чтения файлов properties используются методы загрузки ресурсов, которые работают специфичным образом. Собственно для чтения используется метод Properties.load, который не использует file.encoding (там в исходниках жёстко указана кодировка ISO-8859-1), поэтому единственный способ указать русские буквы — использовать формат \uXXXX и утилиту native2ascii.
Метод Properties.save работает по разному в версиях JDK 1.1 и 1.2. В версиях 1.1 он просто отбрасывал старший байт, поэтому правильно работал только с англицкими буквами. В 1.2 делается обратное преобразование в \uXXXX, так что он работает зеркально к методу load.
Если файлы properties у вас загружаются не как ресурсы, а как обычные файлы конфигурации, и вас не устраивает такое поведение — выход один, написать собственный загрузчик.
Русские буквы и не только

 Не сильно отчаявшись, появилось решение. Используем inputStreamReader:

            final Properties settings = new Properties();
            FileInputStream in = null;
            InputStreamReader inR = null;
            try {
                in = new FileInputStream("config/welcome.properties");
                inR = new InputStreamReader(in, "UTF-8");
            } catch (UnsupportedEncodingException ex) {
                ...
            } catch (FileNotFoundException ex) {
                ...
            }
            try {
                settings.load(inR);
            } catch (IOException ex) {
                ...
            }