öCSV文件创建中的字符编码问题

时间:2014-05-21 12:27:41

标签: java character-encoding fileutils apache-commons-io

我正在尝试从我的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中设置吗?有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

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

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

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

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

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

答案 1 :(得分:1)

写入文件时不指定编码。

结果是使用了默认编码。

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

在您使用BOM前置文件之前,Excel无法读取UTF-8 ...这是其他程序所不需要的。

所以,你有两个选择:

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

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

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