2015-03-02 3 views
0

Я этот кодJava FileWriter потерял специальные символы

//write a file in a specific directory 
public static void writeFile(String comment, String outputFileName) { 
    FileWriter fWriter = null; 
    BufferedWriter writer = null; 
    try { 
     fWriter = new FileWriter(outputFileName,true); 
     writer = new BufferedWriter(fWriter); 
     writer.write(comment); 
     writer.newLine(); 
     writer.close(); 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
    } 
} 

Но когда я сохранить файл в имя_выходного_файле, он потерял каждый особый характер. Формат вывода

Файл .txt

Некоторые решения?

спасибо

+1

Уже ответил ... http://stackoverflow.com/questions/6998905/java-bufferedwriter-object-with-utf-8 –

+0

Не существует такого понятия, как «формат выходного файла». 'txt' - это просто расширение. Вы можете вызвать текстовый файл «foo.exe» для всех забот ОС. Здесь важно, что вы используете «Writer», который преобразует символы, которые вы передаете в байты, а байты, которые выводятся, зависят от использования кодировки. И так как вы не указали какой-либо, ну, используется кодировка платформы по умолчанию ... – fge

ответ

2

FileWriter использует платформы по умолчанию кодировку. Очень редко использовать этот класс, ИМО.

Я предлагаю вам использовать OutputStreamWriter с указанием нужной кодировки - где UTF-8 почти всегда является хорошим выбором, когда у вас есть выбор.

Если вы используете Java 7 или выше, Files.newBufferedWriter - ваш друг - и с Java 8 существует перегрузка без параметра Charset, и в этом случае UTF-8 используется автоматически.

+0

Другим решением, гарантирующим, что символы действительно доступны для записи, является использование 'OutputStreamWriter', поскольку версия его принимает' CharsetEncoder' как аргумент, который вы можете использовать для '.onUnmappableCharacter (CodingErrorAction.REPORT)' (наоборот, есть версия 'InputStreamReader', принимающая' CharsetDecoder' в качестве аргумента) – fge

+0

Спасибо большое :) – Fabio

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