【问题标题】:Java FileWriter lost special characters [duplicate]Java FileWriter丢失了特殊字符[重复]
【发布时间】:2015-03-02 10:49:33
【问题描述】:

我有这个代码

 //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

一些解决方案?

非常感谢

【问题讨论】:

  • 没有“文件输出格式”之类的东西。 txt 只是一个扩展。你可以调用一个文本文件“foo.exe”来处理所有操作系统的问题。这里重要的是您使用Writer 将您提供的字符转换为字节,并且输出的字节取决于编码的使用。而且由于您没有指定任何内容,所以使用默认平台编码...

标签: java special-characters filewriter


【解决方案1】:

FileWriter 使用平台默认编码。 IMO,使用该类很少是一个好主意。

我建议您使用 OutputStreamWriter 指定您想要的编码 - 当您一个选择时,UTF-8 几乎总是一个不错的选择。

如果您使用的是 Java 7 或更高版本,Files.newBufferedWriter 是您的朋友 - 在 Java 8 中,没有Charset 参数的重载,在这种情况下会自动使用 UTF-8。

【讨论】:

  • 另一种确保字符确实可写的解决方案是使用OutputStreamWriter,因为它的一个版本接受CharsetEncoder 作为参数,您可以将其用于.onUnmappableCharacter(CodingErrorAction.REPORT)(相反,有一个版本的 InputStreamReader 接受 CharsetDecoder 作为参数)
猜你喜欢
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 2015-11-27
  • 2012-06-26
相关资源
最近更新 更多