CSV檔為以逗號區隔欄位,用來儲存資料的純文字格式
指定了編碼的純文字格式應該是與亂碼無緣
但有時以微軟的Excel開啟.csv檔卻會發現內容為亂碼
發生的原因是微軟內部系統處理格式時會在開頭暗中寫入一串判別的字碼
而微軟系統就以文字檔案中是否含這串暗碼來判定要以UTF-8或ASCII格式讀取檔案
所以我們若要讓我們產出的CSV檔能正確的被Excel讀取,就要在檔案開頭加入暗碼
public CSVWriter(OutputStream out){
this.out=out;
//Corresponding to Microsoft Excel, make file won't open with scrambles in Excel
byte[] BOM_UTF8 = { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF };
try {
out.write(BOM_UTF8);
} catch (IOException e) {
System.err.println("BOM寫入CSV失敗");
}
....
}
指定了編碼的純文字格式應該是與亂碼無緣
但有時以微軟的Excel開啟.csv檔卻會發現內容為亂碼
發生的原因是微軟內部系統處理格式時會在開頭暗中寫入一串判別的字碼
而微軟系統就以文字檔案中是否含這串暗碼來判定要以UTF-8或ASCII格式讀取檔案
所以我們若要讓我們產出的CSV檔能正確的被Excel讀取,就要在檔案開頭加入暗碼
public CSVWriter(OutputStream out){
this.out=out;
//Corresponding to Microsoft Excel, make file won't open with scrambles in Excel
byte[] BOM_UTF8 = { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF };
try {
out.write(BOM_UTF8);
} catch (IOException e) {
System.err.println("BOM寫入CSV失敗");
}
....
}
留言
張貼留言