csv 文件打開亂碼,有哪些方法可以解決?
Excel 在讀取 csv 的時候是通過讀取文件頭上的 bom 來識別編碼的,這導致如果我們生成 csv 文件的平臺輸出無 bom 頭編碼的 csv 文件(例如 utf-8 ,在標準中默認是可以沒有 bom 頭的),Excel 只能自動按照默認編碼讀取,不一致就會出現亂碼問題了。掌握了這點相信亂碼已經無法阻擋我們前進的步伐了:只需將不帶 bom 頭編碼的 csv 文件,用文本編輯器(工具隨意,推薦 notepad++ )打開并轉換為帶 bom 的編碼形式(具體編碼方式隨意),問題解決。
當然,如果你是像我一樣的碼農哥哥,在生成 csv 文件的時候寫入 bom 頭更直接點,用戶會感謝你的。
附錄:對于 utf-8 編碼,unicode 標準中是沒有 bom 定義的,微軟在自己的 utf-8 格式的文本文件之前加上了EF BB BF三個字節作為識別此編碼的 bom 頭,這也解釋了為啥大部分亂碼都是 utf-8 編碼導致的原因
SPRING BATCH中生成CSV文件時的解決方案:
new FlatFileItemWriterBuilder<T>()
.name(itemWriterName)
.resource(outputResource)
.lineAggregator(lineAggregator)
.headerCallback(
h -> {
System.out.println(header);
h.write('\uFEFF');//只需加這一行
h.write(header);
}
)
.build();
.name(itemWriterName)
.resource(outputResource)
.lineAggregator(lineAggregator)
.headerCallback(
h -> {
System.out.println(header);
h.write('\uFEFF');//只需加這一行
h.write(header);
}
)
.build();
https://stackoverflow.com/questions/48952319/send-csv-file-encoded-in-utf-8-with-bom-in-java
posted on 2021-03-23 10:30 paulwong 閱讀(376) 評論(0) 編輯 收藏 所屬分類: SPRING 、SRPING BATCH