我在使用 opencsv 时遇到了一个非常烦人的编码问题。导出 csv 文件时,我将字符类型设置为"UTF-8"。
CSVWriter writer = new CSVWriter(new OutputStreamWriter("D:/test.csv", "UTF-8"));
但是当我使用 Office Excel 2007 打开 csv 文件时Microsoft结果它有"UTF-8 BOM"编码?
一旦我将文件保存在记事本中并重新打开,文件就会变回 UTF-8,并且其中的所有字母看起来都很好。我想我已经搜索了足够多,但我还没有找到任何解决方案来防止我的文件变成"UTF-8 BOM"。有什么想法吗?
我想你的文件有一个"没有BOM的UTF-8"编码。您最好将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。
UTF-8
和UTF-8 Signature
(有时错误地命名为UTF-8 BOM
)是相同的编码,签名仅用于将其与任何其他编码区分开来。任何 unicode 应用程序都应正确处理 UTF-8 签名(即三字节序列EF BB BF
)。
为什么Java专门添加这个签名以及如何阻止它这样做我不知道。