2015-06-22 2 views
1

Я пытаюсь читать в .properties файлы со многими языками, добавлять к ним новые записи, сортировать и печатать обратно в файл. У меня есть кодировка как UTF-8, и она работает для всех моих текущих языков, кроме русского. При чтении файла я получаю все вопросительные знаки из русского файла. Когда он отпечатывается, у него есть много правильного текста, но есть случайные вопросительные знаки здесь и там. Вот мой код для чтения в файле.Чтение .properties файлов, написанных на русском

Properties translation = new Properties() { 

    private static final long serialVersionUID = 1L; 

    @Override 
    public synchronized Enumeration<Object> keys() { 
     return Collections.enumeration(new TreeSet<Object>(super.keySet())); 
    } 
} 

byte[] readIn = Files.readAllBytes(Paths.get(filePath)); 
String replacer = new String(readIn).replace("\\","\\\\"); 
translation.load(new InputStreamReader(new ByteArrayInputStream(replacer.getBytes()),"UTF-8")); 

ответ

2

new String(readIn) и replacer.getBytes() не используют UTF8. Они используют стандартную кодировку платформы. Передайте StandardCharsets.UTF_8 в качестве дополнительного аргумента для обоих вызовов.

BTW, преобразование строки в массив байтов, а затем преобразование байтов в символы и чтение их - пустая трата времени и ресурсов. Просто сделайте

translation.load(new StringReader(replacer)); 
+0

Похоже, оно исправлено при печати обратно в файл. Хотя он все еще отображает вопросительные знаки, если их печатать на system.out, а не обратно в файл. Странный. –

+0

Ваша консоль или ее шрифт, вероятно, не могут отображать русские символы. –

0

Иногда изменение кодировки на utf-8 вызывает ошибки, такие как некоторые дополнительные символы или ничего не делает. Ссылка: How can i read a Russian file in Java? может вам помочь.

Смежные вопросы