2015-08-18 29 views
4

我使用supercscv編寫utf-8編碼的csv。 它產生一個正常的文件,但是excel不能識別它爲utf-8導致它是愚蠢的,excel在沒有bom標記的情況下丟失,因此當用excel打開時任何特殊字符都被破壞。使用supercsv寫入UTF-8 BOM

有沒有辦法用supercsv把文件寫成UTF-8的BOM? 我找不到它。

感謝

回答

6

由於supercsv可能封裝了一個作家:

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

謝謝@JoopEggen,那正是我所期待的。 這是它的樣子: 'OutputStreamWriter o = new OutputStreamWriter(out); // BOM o.write('\ uFEFF'); writer = new CsvBeanWriter(o,CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE);' – allaf

+0

@allaf更好地將UTF-8添加到新的OutputStreamWriter調用中,否則使用默認的平臺編碼 - 這是不可移植的。 –

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?

+0

這是不真實的;如果BOM中存在該文件,則Excel將以正確的編碼打開該文件。儘管默認情況下不做UTF-8是一個謎。 – fge

+0

這個確定嗎? MS Excel解釋文件BOM? –

+1

是的,我確定;嘗試上面的答案,即在寫入文件之前編寫其他文件 – fge