Java ö;CSV文件创建中的字符编码问题
我正在尝试从我的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(),
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表预先添加到文件中,并使其他程序无法读取该文件李>
另一个解决方案当然是使用ISO作为编码,但是。。。好的,这是您的选择。您在写入文件时不指定编码 其结果是使用默认编码 然而,似乎您使用的是UTF-8,不幸的是,您使用的是Excel Excel无法读取UTF-8,除非您在文件前面加上BOM。。。这是其他程序所不需要的 因此,您有两个选择:
- 继续做你正在做的事情,让Excel见鬼去吧李>
- 将BOM表预先添加到文件中,并使其他程序无法读取该文件李>
另一个解决方案当然是使用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基本上阻止了这里的进展;这真的取决于您的用例!