用 supercsv 写 UTF-8 BOM

write UTF-8 BOM with supercsv

我正在使用 supercscv 编写 utf-8 编码的 csv。 它生成一个普通文件,但 excel 无法将其识别为 utf-8,因为它很笨,excel 没有 bom 标记就丢失了,因此使用 excel 打开时任何特殊字符都会损坏。

有没有办法用 supercsv 将文件写成 UTF-8 和 BOM? 我找不到。

谢谢

因为 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 文件。您可以查看此 post:Is it possible to force Excel recognize UTF-8 CSV files automatically?