本文介紹如何解決生成內容是中文的csv file後,用excel開啟會有亂碼的問題。

了解編碼

  • UTF-8
    以字節為編碼單元,在UTF-8中,字節順序在所有系統中都是一樣的。

  • UTF-8-sig
    sig的意思是signature,即為帶有簽名的UTF-8,又稱UTF-8 with BOM(Byte Order Mark)。

  • BOM (Byte Order Mark)
    字面上意思為"字節順序標記",出現在文件的頭部(header),在Unicode編碼標準中用於標示文件是採用何種格式的編碼。

那麼為什麼寫入CSV要用UTF-8-sig呢?

  • Excel在讀取csv時是透過文件header上的BOM來識別編碼,所以若header無帶BOM資訊,那麼會依照預設的Unicode編碼讀取。
  • 當我們使用UTF-8生成csv時,並未在header生成BOM訊息,所以Excel會依照Unicode編碼讀取,就會有亂碼產生。

實作

下面是簡單的生成csv的python程式:

只要加上encoding=’utf-8-sig’,這樣產生的檔案用excel開啟就不會有亂碼了。

最後修改日期: 2021-03-31

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。