我正在尝试从我的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中设置吗?有人可以帮我解决这个问题吗?
答案 0 :(得分:4)
首先检查您是否使用正确显示输出的文本查看器。如果不,问题可能是您的系统编码。
FileUtils.write(file, string)
使用默认的系统编码,在您的系统中似乎是8位。然而,“ö”字符被编码为两个字节,从而产生“¶”。
使用FileUtils.write(File file, CharSequence data, String encoding)
代替,使用适当的编码:
我的建议是使用FileUtils.write(file, string, "UTF-8")
。
答案 1 :(得分:1)
写入文件时不指定编码。
结果是使用了默认编码。
但是,您似乎使用了UTF-8,不幸的是,您使用的是Excel。
在您使用BOM前置文件之前,Excel无法读取UTF-8 ...这是其他程序所不需要的。
所以,你有两个选择:
此外,如果您使用的是Java 7+,请改用Files.write()
。
另一种解决方案当然是使用ISO作为编码,但......嗯,这是您的选择。