2015-03-02 72 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