utf-8保存的csv格式文件要讓Excel正常打開的話搁胆,需要在文件最前面加入BOM(Byte order mark)弥搞。如果接收者收到以EF BB BF開頭的字節(jié)流,就知道這是UTF-8編碼了渠旁。
所以在write文件的內(nèi)容數(shù)據(jù)之前攀例,先write一下BOM。如下面代碼
FileOutputStream fos = new FileOutputStream(new File(this.csvFileAbsolutePath));?
? ? ? ? byte [] bs = { (byte)0xEF, (byte)0xBB, (byte)0xBF};? //UTF-8編碼
? ? ? ? fos.write(bs);?
? ? ? ??fos.write(...);
? ? ? ? fos.close();?
這樣添加了BOM的CSV文件用excel直接打開顾腊,是不會(huì)出現(xiàn)亂碼的粤铭。
我當(dāng)時(shí)遇到的問題是這樣的。下載CSV文件杂靶,用excel打開梆惯,中文亂碼酱鸭,用atom,notepad++和 記事本打開垛吗,顯示正常凹髓。 查資料發(fā)現(xiàn)是excel不能識(shí)別無BOM頭的unicode文件問題,就是excel在打開CSV文件時(shí)默認(rèn)用ASNI打開怯屉。? 所以需要添加BOM頭蔚舀。
Gallen 轉(zhuǎn)載