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

Java ö;CSV文件创建中的字符编码问题,java,character-encoding,fileutils,apache-commons-io,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(),

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

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

FileUtils.write(文件,字符串)
使用默认的系统编码,在您的系统中似乎是8bit。然而,“ö”字符被编码为两个字节,结果是“Ô

使用
FileUtils.write(文件文件、字符序列数据、字符串编码)
代替,使用适当的编码:

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

我的建议是使用
FileUtils.write(文件,字符串,“UTF-8”)

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

FileUtils.write(文件,字符串)
使用默认的系统编码,在您的系统中似乎是8bit。然而,“ö”字符被编码为两个字节,结果是“Ô

使用
FileUtils.write(文件文件、字符序列数据、字符串编码)
代替,使用适当的编码:

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

我的建议是使用
FileUtils.write(文件,字符串,“UTF-8”)

写入文件时,不指定编码

其结果是使用默认编码

然而,似乎您使用的是UTF-8,不幸的是,您使用的是Excel

Excel无法读取UTF-8,除非您在文件前面加上BOM。。。这是其他程序所不需要的

因此,您有两个选择:

  • 继续做你正在做的事情,让Excel见鬼去吧
  • 将BOM表预先添加到文件中,并使其他程序无法读取该文件
另外,如果您使用的是Java7+,请改用


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

您在写入文件时不指定编码

其结果是使用默认编码

然而,似乎您使用的是UTF-8,不幸的是,您使用的是Excel

Excel无法读取UTF-8,除非您在文件前面加上BOM。。。这是其他程序所不需要的

因此,您有两个选择:

  • 继续做你正在做的事情,让Excel见鬼去吧
  • 将BOM表预先添加到文件中,并使其他程序无法读取该文件
另外,如果您使用的是Java7+,请改用



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

首先,在写入文件时,您不指定编码;第二,你用什么程序读取CSV?@fge我用Microsoft Excel 2010打开CSV。@fge。当我用notepad++打开它时,我确实得到了正确的字符。所以我认为这是系统编码。谢谢你的建议。不,不是。看看我的答案。首先,在写入文件时,您没有指定编码;第二,你用什么程序读取CSV?@fge我用Microsoft Excel 2010打开CSV。@fge。当我用notepad++打开它时,我确实得到了正确的字符。所以我认为这是系统编码。谢谢你的建议。不,不是。看看我的答案。当我用记事本++打开这个时,我得到了正确的字符。所以我认为这是系统编码。谢谢你的建议。当我用记事本++打开它时,我确实得到了正确的字符。所以我认为这是系统编码。谢谢你的建议。Excel可以阅读UTF-8,如果你不使用BOM@fge. 您能帮助我如何在这里预先设置BOM表来解决这个问题吗。@在写行之前,您应该写char'\ufeff';但是别忘了把你的字符编码设置为UTF-8。@Patan这是一个艰难的决定;实际上,在2014年,您应该全面使用UTF-8,但MS Office基本上阻止了这里的进展;这真的取决于您的用例!Excel可以读取UTF-8,如果不使用BOM@fge. 您能帮助我如何在这里预先设置BOM表来解决这个问题吗。@在写行之前,您应该写char'\ufeff';但是别忘了把你的字符编码设置为UTF-8。@Patan这是一个艰难的决定;实际上,在2014年,您应该全面使用UTF-8,但MS Office基本上阻止了这里的进展;这真的取决于您的用例!