Excel讀取UTF-8編碼的CSV檔,中文變亂碼的簡單解法

最近將一個原本用MS950(Big5)的網頁系統變更為UTF-8編碼,原本想只是很簡單的轉換,沒想到接連遇到大大小小的不相容狀況,例如匯出CSV(Comma Separated Values)資料給Excel時竟然變成亂碼!

搜尋後了解因為CSV是很鬆散的格式檔,而Excel預設是以ANSI的方法讀取CSV檔,將UTF-8內容的檔案以MS950的方法讀進去就形成亂碼了。而最簡單的解決方法是將CSV檔寫成UTF-8帶簽名(with BOM,byte-order marker)的格式,也就是在檔案最開頭寫入\uFEFF字元:

 
oWriter.print("\uFEFF");  // byte-order marker (BOM)

這個解決方法能讓Excel 2003、2010正常讀到中文,但Excel 2007卻還是亂碼,也許產生成UTF-16編碼就可能解決,但要修改更多程式,而且因為公司裡使用Excel 2007的人很少,就直接請他們更新Excel系統,也就不再多試了。

參考

##

您可能也會有興趣的類似文章

簡睿

服務於軟體業的資訊老兵。興趣廣泛,學習力佳,樂於分享所知所學。

5 個回應

  1. 網頁設計表示:

    原來如此~~
    常常都亂碼~~
    感謝分享這個訣竅~~

  2. Alex表示:

    上次忘了補充另一件事情。

    CVS到excel有另外一種方式,用匯入(Import)的。
    使用匯入會有編碼讓您選。

    要先開啟一個新檔,才能找到匯入選項。

  3. Alex表示:

    拜讀貴文許久,回饋一下小弟經驗。

    FEFF和FFFE是Unicode的Byte Order。
    UTF8有一個3 Byte的BOM,EF BB BF。

    據我所知,這可能是Microsoft訂下的,雖然大多數系統都接受,但似乎仍不是公開的標準。

  1. 2021/04/12

    […] Excel讀取UTF-8編碼的CSV檔,中文變亂碼的簡單解法 […]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *