gpt4 book ai didi

java - 通过 Excel 打开带有 UTF-8 BOM 的 CSV

转载 作者:搜寻专家 更新时间:2023-10-31 20:12:14 26 4
gpt4 key购买 nike

我用 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 不会“打开”csv 文件。它使用默认值即时将它们转换为 Excel 文件。这些默认值可能会有所不同,具体取决于您的区域设置。正因为如此,it's never a good idea to let Excel open csv files using the defaults ,因为您永远无法确定最终会得到什么。

更安全的方法是使用“从文本导入”方法,并明确指定分隔符、编码等...但是,请注意,在 Excel 中“另存为 csv”是一个更糟糕的主意,因为它确实不允许您指定编码、分隔符或任何其他细节。访问确实如此。

在美国 Windows 版本的 Excel 上,默认的列分隔符是逗号。在欧洲 Windows 版本上,逗号保留用于十进制符号,为避免冲突,默认情况下使用分号作为列分隔符。

如果您 -真的- -真的- -必须- 使用 CSV,您可以考虑添加 "sep=," indicator在你的 csv 文件的顶部。但是,请注意这可能会导致其他应用程序出现问题。

关于java - 通过 Excel 打开带有 UTF-8 BOM 的 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20275470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com