【发布时间】:2013-12-15 01:01:45
【问题描述】:
我通过java创建带有数据的csv文件。我遇到了以下众所周知的问题:葡萄牙语中的字母在 Excel 中以错误的方式显示(双击打开时)。
我通过 UTF-16LE+BOM 解决了这个问题,但 excel 开始将制表符识别为列分隔符而不是逗号。
所以我寻找另一个解决方案并看到很多帖子,其中人们说只需添加 UTF-8 BOM 并以 UTF-8 写入文件就可以为 Excel 2007 及更高版本完成工作。我在我的工作计算机上尝试了最简单的示例,但它失败了。但是当我在家里的电脑上尝试这个时,它就像一个魅力。
两台计算机都安装了相同版本的 java 和操作系统 Windows 7。 我很迷惑。谁能说出是什么导致了这种奇怪的行为?
您可以在下面查看我最简单的示例:
String filename = "D:/check/test_with_bom.csv";
FileOutputStream fos = new FileOutputStream(filename);
byte[] bom = new byte[] { (byte)0xEF, (byte)0xBB, (byte)0xBF };
fos.write(bom);
OutputStreamWriter osw = new OutputStreamWriter(fos , "UTF-8");
PrintWriter printWriter = new PrintWriter(osw);
printWriter.print("Hello,Olá,ão,ção");
printWriter.close();
【问题讨论】:
-
Excel 版本是否相同?
-
你为什么要创建那个过时的
PrintWriter?在Writer上调用write比在PrintWriter上调用print更难吗? -
Robin Green,我猜是的 - 两台机器都有 2007 Excel。我看到的明显区别是在工作机器上我有俄语 excel。
-
Holger,将 print 更改为 write 不会改变结果。这只是一个测试样本,我写它是为了证明这种方法的可能性。