用supercsv写UTF-8 BOM

时间:2015-08-18 12:08:32

标签: java csv utf-8 byte-order-mark supercsv

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

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

由于

2 个答案:

答案 0 :(得分:8)

因为supercsv可能包装了一个作家:

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

答案 1 :(得分:0)

根据我的经验,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文件。您可以查看此帖子:Is it possible to force Excel recognize UTF-8 CSV files automatically?