13

我在使用 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”。有什么想法吗?

4

2 回答 2

25

我想你的文件有一个 'UTF-8 without 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。

于 2014-07-14T04:21:22.823 回答
3

UTF-8UTF-8 Signature(有时被错误地命名为UTF-8 BOM)是相同的编码,并且签名仅用于将其与任何其他编码区分开来。任何 unicode 应用程序都应正确处理 UTF-8 签名(即三字节序列EF BB BF)。

为什么 Java 专门添加了这个签名以及如何阻止它这样做我不知道。

于 2012-04-13T07:01:38.147 回答