1

我正在尝试从我的 Java 代码创建一个 CSV 文件。

    File file = File.createTempFile("DummyReport", ".csv");
    SomeListofObjects items = getSomeList();
    FileUtils.write(file, "ID;CREATION;" + System.lineSeparator());
    FileUtils.writeLines(file, activities.getItems(), true);        
    return file;

我面临一些特殊字符的问题。

当我调试代码时,我发现我有一个字符为“ö”。但是在生成的 csv 文件中,它奇怪地出现了“ö”。

我们可以在 FileUtile 或 File 中设置它吗?有人可以帮我解决这个问题吗?

4

2 回答 2

4

首先检查您是否使用正确显示输出的文本查看器。如果不是,则问题可能出在您的系统编码上。

FileUtils.write(file, string)使用默认系统编码,在您的系统中似乎是 8 位。然而,“ö”字符被编码为两个字节,导致“ö.”。

改为使用FileUtils.write(File file, CharSequence data, String encoding)适当的编码:

  • ISO 8859-1(8 位标准,Latin-1)
  • CP1252(8 位专有,Windows 默认,扩展拉丁语 1)
  • MacRoman(8 位专有,Apple 默认)
  • UTF-8(16 位标准,Linux 默认)
  • Latin-15(并不总是支持)

我的建议是使用FileUtils.write(file, string, "UTF-8").

于 2014-05-21T12:34:09.550 回答
1

写入文件时不指定编码。

结果是使用了默认编码。

但是,您似乎使用的是 UTF-8,不幸的是,您使用的是 Excel。

并且 Excel 无法读取 UTF-8,直到您在文件前面加上 BOM ......其他程序不需要。

所以,你有两个选择:

  • 继续做你正在做的事情,并用 Excel 去地狱;
  • 在文件中添加 BOM,使文件无法被其他程序读取!

此外,如果您使用的是 Java 7+,请Files.write()改用。

另一种解决方案当然是使用 ISO 作为编码,但是……嗯,这是你的选择。

于 2014-05-21T12:57:09.680 回答