java 層生成文件如csv,在excel中打開亂碼

今天碰到一件很奇葩的事情,在java層寫入文件txt,生成.csv 在txt看沒問題(帶有中文),用excel看就全亂碼了。。



經過一系列的排查發現一個用win32下txt的另存爲utf——8格式在excel中打開就正常了。 覺的不可思議,因爲我java層寫入就是按utf-8編碼讀取寫入的。

這邊要說下,java本身是unicode 的string格式,需要轉utf-8好。


解決方法:


因爲excel讀取會需要一個頭叫bom,通過這裏面的規定格式去判斷用什麼方式讀取其中utf的bom爲0XEF 0XBB 0XBF,那這樣,我們在寫入文件的時候就需要在開始處寫入上面三個byte就正常顯示了。。然後用二進制文本看,正常寫入成功,在excel中就打開正常了。




插入的代碼如下:

RandomAccessFile accessFile;
try {
accessFile = new RandomAccessFile(fileName, "rw");
long length = accessFile.length();


if(length==0){
final byte[] bom = new byte[] { (byte)0xEF, (byte)0xBB, (byte)0xBF };
accessFile.write(bom);
length+=3;
}
accessFile.seek(length);

然後就可以開始往裏寫東西了,中文也是正常的了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章