使用utf-8的opencsv CSVWriter似乎不适用于多种语言

时间:2012-04-13 06:41:58

标签: java unicode utf-8 opencsv

使用opencsv时,我遇到了非常烦人的编码问题。 当我导出csv文件时,我将字符类型设置为'UTF-8'。

CSVWriter writer = new CSVWriter(new OutputStreamWriter("D:/test.csv", "UTF-8"));

但是当我用Microsoft Office Excel 2007打开csv文件时,它发现它有'UTF-8 BOM'编码?

将文件保存在记事本中并重新打开后,文件将返回UTF-8,其中的所有字母都显示正常。 我想我已经搜索得足够多了,但我没有找到任何解决方案来防止我的文件变成'UTF-8 BOM'。有什么想法吗?

2 个答案:

答案 0 :(得分:17)

我认为你的文件有'UTF-8无BOM'编码。 您最好将BOM编码提供给您的文件,即使在大多数情况下没有必要,但只有一个明显的例外是当您处理ms excel时。

FileOutputStream os = new FileOutputStream(file);
os.write(0xef);
os.write(0xbb);
os.write(0xbf);
CSVWriter csvWrite = new CSVWriter(new OutputStreamWriter(os));

现在你的文件将被excel理解为utf-8 csv。

答案 1 :(得分:2)

UTF-8UTF-8 Signature(有时错误地将其命名为UTF-8 BOM)是相同的编码和签名is used only to distinguish it from any other encodings。任何unicode应用程序都应该正确处理UTF-8签名(三个字节序列EF BB BF)。

为什么Java会专门添加此签名以及如何阻止它执行我不知道的操作。