Java 使用utf-8的opencsv CSVWriter不';似乎不适合多种语言

Java 使用utf-8的opencsv CSVWriter不';似乎不适合多种语言,java,unicode,utf-8,opencsv,Java,Unicode,Utf 8,Opencsv,我在使用opencsv时遇到了一个非常恼人的编码问题。 导出csv文件时,我将字符类型设置为“UTF-8” CSVWriter writer = new CSVWriter(new OutputStreamWriter("D:/test.csv", "UTF-8")); 但是当我用MicrosoftOfficeExcel2007打开csv文件时,发现它有“UTF-8BOM”编码 一旦我将文件保存在记事本中并重新打开,文件将返回UTF-8,其中的所有字母看起来都很好。 我想我已经搜索够了,但我还

我在使用opencsv时遇到了一个非常恼人的编码问题。 导出csv文件时,我将字符类型设置为“UTF-8”

CSVWriter writer = new CSVWriter(new OutputStreamWriter("D:/test.csv", "UTF-8"));
但是当我用MicrosoftOfficeExcel2007打开csv文件时,发现它有“UTF-8BOM”编码

一旦我将文件保存在记事本中并重新打开,文件将返回UTF-8,其中的所有字母看起来都很好。
我想我已经搜索够了,但我还没有找到任何解决方案来防止我的文件变成“UTF-8 BOM”。有什么想法吗?

UTF-8
UTF-8签名
(有时错误地命名为
UTF-8 BOM
)是相同的编码和签名。任何unicode应用程序都应正确处理UTF-8签名(即三字节序列
EF BB BF


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

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

Java不应该单独添加BOM,因为也没有使用两个字符串的
OutputStreamWriter
构造函数。我想您的代码中缺少一些东西。BOM表可能是您编写的数据的一部分吗?在处理ms excel时有什么问题?多年来,这对我来说真是个麻烦!您的解决方案非常有效。谢谢你度过了我的一天。谢谢