我使用supercscv編寫utf-8編碼的csv。 它產生一個正常的文件,但是excel不能識別它爲utf-8導致它是愚蠢的,excel在沒有bom標記的情況下丟失,因此當用excel打開時任何特殊字符都被破壞。使用supercsv寫入UTF-8 BOM
有沒有辦法用supercsv把文件寫成UTF-8的BOM? 我找不到它。
感謝
我使用supercscv編寫utf-8編碼的csv。 它產生一個正常的文件,但是excel不能識別它爲utf-8導致它是愚蠢的,excel在沒有bom標記的情況下丟失,因此當用excel打開時任何特殊字符都被破壞。使用supercsv寫入UTF-8 BOM
有沒有辦法用supercsv把文件寫成UTF-8的BOM? 我找不到它。
感謝
由於supercsv可能封裝了一個作家:
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文件。你可以檢查這個帖子:Is it possible to force Excel recognize UTF-8 CSV files automatically?
謝謝@JoopEggen,那正是我所期待的。 這是它的樣子: 'OutputStreamWriter o = new OutputStreamWriter(out); // BOM o.write('\ uFEFF'); writer = new CsvBeanWriter(o,CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE);' – allaf
@allaf更好地將UTF-8添加到新的OutputStreamWriter調用中,否則使用默認的平臺編碼 - 這是不可移植的。 –