使用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'。有什么想法吗?
答案 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-8
和UTF-8 Signature
(有时错误地将其命名为UTF-8 BOM
)是相同的编码和签名is used only to distinguish it from any other encodings。任何unicode应用程序都应该正确处理UTF-8签名(三个字节序列EF BB BF
)。
为什么Java会专门添加此签名以及如何阻止它执行我不知道的操作。