UTF-8的CSV文件中文亂碼問題解決辦法


  最近工作中需要將一些數據寫入CSV文件中,並要使用Excel打開進行查看。測試時發現,導出的CSV文件用Excel打開后,中文字符全部是亂碼。寫入CSV文件的是UTF-8編碼的數據,文件在Linux中查看是沒有問題的,在Windows上用Excel打開卻有亂碼。在查閱資料后發現,windows系統中文本文檔的編碼格式用BOM來指定,在文件的開頭要寫入字符:EF BB BF(UTF-8的BOM編碼),這樣UTF-8編碼的文件才能被正確識別。於是修改代碼,類似下邊這樣:

FileOutputStream fos = new FileOutputStream(new File(this.csvFileAbsolutePath));
byte [] bs = { (byte)0xEF, (byte)0xBB, (byte)0xBF};
fos.write(bs);
//寫入數據 fos.close()

  在CSV文件最前端寫入BOM后,用Excel打開時就不會再有亂碼了。

 

關於BOM

  BOM(byte-order mark),即字節順序標記,用於標記字節序的,也就是大小端。UTF- 8以字節為編碼單元,沒有字節序的問題,因此UTF-8不需要BOM來表明字節順序,但可以用BOM來表明編碼方式,在Windows系統中就是使用BOM來標記文本文件的編碼方式的。UTF- 8的BOM編碼是EF BB BF,Excel發現文件開頭的EF BB BF就知道文件編碼方式是UTF- 8,因此就能正常顯示中文。

 

參考鏈接:

  https://blog.csdn.net/zhaozhi406/article/details/46241415

  https://blog.csdn.net/u014563989/article/details/53087470

  http://www.fmddlmyy.cn/text6.html

  https://blog.csdn.net/yutianxu1986/article/details/82595290

  https://blog.csdn.net/qq_35623773/article/details/87868608


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM