write UTF-8 BOM with supercsv



我使用supercscv来编写utf-8编码的csv。它产生一个正常的文件,但excel不识别它为utf-8,因为它是愚蠢的,excel丢失了没有出生标记,所以任何特殊字符在excel打开时都会损坏。

是否有一种方法来写一个文件作为UTF-8与BOM与supercsv ?我找不到它。

谢谢

因为supercsv可能包装了Writer:

Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8);
writer.write('uFEFF'); // BOM for UTF-*
... new BeanWriter(writer, CsvPreference.STANDARD_PREFERENCE);

根据我的经验,MS Excel总是以默认的MS Office字符集打开csv文件。在我的情况下,它一直是Windows 1252(西班牙),即使不是Windows机器(MS Office for OSX)。处理它的唯一方法是用这个字符集编写CSV文件。

byte[] csvFileBytes = dataObject.toCSVString().getBytes(Charset.forName("Windows-1252"));

MS Excel似乎从不使用其他字符集打开CSV文件。你可以查看这篇文章:是否有可能强制Excel自动识别UTF-8 CSV文件?

最新更新