2015-03-02 67 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()); 
    } 
} 

但是,當我將文件保存在outputFileName,就失去了所有的特殊字符。

文件輸出格式爲.txt

某些解決方案?

非常感謝

+1

已經回答了... http://stackoverflow.com/questions/6998905/java-bufferedwriter-object-with-utf-8 – 2015-03-02 10:52:10

+0

沒有這樣的事情作爲「文件輸出格式」。 'txt'只是一個擴展。你可以調用一個文本文件「foo.exe」來處理所有操作系統。這裏最重要的是你使用了一個'Writer'來將你給它的字符轉換成字節,而輸出的字節則取決於編碼的用途。因爲你沒有指定任何,所以使用默認的平臺編碼... – fge 2015-03-02 11:01:52

回答

2

FileWriter使用平臺的默認編碼。 IMO使用這個類非常罕見。

我建議你使用OutputStreamWriter指定你想要的編碼 - 其中UTF-8幾乎總是一個不錯的選擇,當你有一個選擇。

如果您使用的是Java 7或更高版本,Files.newBufferedWriter是你的朋友 - 與Java 8,有沒有Charset參數的重載,在這種情況下,UTF-8,則自動使用。

+0

確保字符確實可寫的另一個解決方案是使用'OutputStreamWriter',因爲它的一個版本接受一個'CharsetEncoder'作爲一個你可以用於'.onUnmappableCharacter(CodingErrorAction.REPORT)'的參數'(相反,有一個'InputStreamReader'版本接受一個'CharsetDecoder'作爲參數) – fge 2015-03-02 11:03:37

+0

非常感謝:) – Fabio 2015-03-02 14:23:57