2019/11/遇到的bug

1.依賴衝突:Program type already present

2.Android APP導出的CSV文件中,中文顯示爲亂碼。

最近項目中的Anroid App需要將數據以CSV文件的形式導出。基於原來的經驗,更得益於Google的力量,很快便完成了基本功能的編碼。但就在最後測試的步驟中,問題出現了。導出CSV文件的列名中,中文全部顯示爲亂碼。

首先想到的是,可能寫入文件是編碼是ASCII?顯式地修改爲UTF-8,問題依舊。

用Notepad,Editplus以文本形式打開CSV文件,中文顯示正常。

 

解決方法

再次感謝萬能的Google與Baidu,經過多次的思考及搜索後。找到了問題的答案:

在文件的開頭,在寫入任何內容之前,向流中寫入 0xEF,0xBB,0xBF三個字節(此處用16進製表示)。用以告訴Excel,此CSV文件的編碼爲UTF-8.

//mark the file as UTF-8 encoded
out.write(new byte[]{(byte) 0xEF, (byte) 0xBB,(byte) 0xBF});

 

原理(並非十分確定)

Excel打開CSV文件(實際爲文本文件)時,需要知道文件的編碼方式(encoding)。如果未能獲取,則默認用ASCII打開。

此處的三個字節 0xEF,0xBB,0xBF爲UTF-8的BOM,標明瞭文件是UTF-8編碼方式的,所以問題得以解決。

BOM爲Byte Order Mark,是爲了解決UTF-16等多字節編碼的字節序問題(big endian,little big endian),UTF-8並不需要。

但此處的0xEF,0xBB,0xBF是用做了UTF-8的標誌,而非BOM的原用途。

發佈了6 篇原創文章 · 獲贊 9 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章