ga('set', 'anonymizeIp', 1);
Categories: CodingPython

[python] 解決生成csv file編碼問題(with BOM)

Share

本文介紹如何解決生成內容是中文的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程式:

import os
import csv

CSV_HEAD = ["COL01","COL02"]
mydata = ["123","456"]
with open("mydata.csv", 'w', newline='', encoding='utf-8-sig') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(CSV_HEAD)
    writer.writerow(mydata)

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

Jys

Published by
Jys

Recent Posts

[python] Flask Create RESTful API

This article gi... Read More

3 年 前發表

[Javascript] 新增/刪除JSON中key值

在web訊息交換常會需要對JS... Read More

3 年 前發表

[JAVA] SQL Server Connection

本文介紹JAVA連線SQL s... Read More

3 年 前發表