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

2022-09-03 18:12:55

我有一个非常烦人的编码问题使用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”。有什么想法吗?


答案 1

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


答案 2

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

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


推荐