BufferedReader/Writer неправильно работает со специальными символами

Я столкнулся с небольшой проблемой с Cipher и BufferedReader/Writer в Java. Все работает нормально, если кому-то нужен мой код, тем не менее, я могу опубликовать его, если хотите. Проблема в том, что если я попытаюсь преобразовать зашифрованные байты в строку (которая отлично работает), а затем записать ее в файл с BufferedWriter со следующей настройкой:

    FileWriter fwrit = new FileWriter(file);
BufferedWriter buffwrit = new BufferedWriter(fwrit); //The writer itself
String encTextString = new String(encText,"ISO-8859-1"); //The String that gets written later

Эта настройка позволяет Writer писать специальные символы, и я думаю, что проблема не здесь (если это так, пожалуйста, сообщите мне). (Да, я уже проверил, работает ли расшифровка без записи в файл и повторная загрузка, и она работает.) Проблема в том, что я не могу правильно настроить BufferedReader, есть ли способ или другой тип записи, который правильно читает символы?


person Slashking    schedule 12.12.2013    source источник
comment
может ли это быть возможным дубликатом? stackoverflow.com/q/9281629/2231632   -  person Praba    schedule 12.12.2013
comment
Я уже пробовал то, что было предложено в этом вопросе некоторое время назад, у меня не сработало.   -  person Slashking    schedule 12.12.2013
comment
Как предложил Рассел, вы пробовали использовать OutputStreamWriter?   -  person Praba    schedule 12.12.2013


Ответы (2)


Из FileWriter javadoc:

«Удобный класс для записи символьных файлов. Конструкторы этого класса предполагают, что кодировка символов по умолчанию и размер байтового буфера по умолчанию являются приемлемыми. Чтобы указать эти значения самостоятельно, создайте OutputStreamWriter на FileOutputStream».

Кодировка по умолчанию, вероятно, UTF-8. Итак, если вы хотите написать ISO-8859-1, вам нужно будет сделать:

new OutputStreamWriter(new FileOutputStream(file), Charset.forName("ISO-8859-1"))

Более того, если ваша цель состоит в том, чтобы получить закодированные байты в файл без изменений, то...

«FileWriter предназначен для записи потоков символов. Для записи потоков необработанных байтов рассмотрите возможность использования FileOutputStream».

person Russell Zahniser    schedule 12.12.2013
comment
так? BufferedWriter buffwrit = новый BufferedWriter (новый OutputStreamWriter (новый FileOutputStream (файл), ISO-8859-1)); - person Slashking; 12.12.2013

Вероятно, лучше не использовать FileWriter, этот класс — просто удобный класс для переноса FileOutputStream в OutputStreamWriter.

В OutputStreamWriter есть конструкторы для кодирования символов, отличных от ascii, с использованием определенной кодировки.

В FileWriter их нет....

person GerritCap    schedule 12.12.2013
comment
Есть еще что-то не так. Я использовал ваш метод и ту же кодировку ISO-8859-1. Результаты: Написано: [B@16d19d73 E�z�9�� Прочитано: E?z?9?? [B@5ccc078 - person Slashking; 12.12.2013