Python: 讀取文件開頭出現\ufeff
前言
今天讀取影像感測器存出來的參數時,發現讀進來的檔案多了\ufeff
這個東西,也因為這樣我的程式一直錯誤不能成功執行。
解決辦法
當文件儲存utf-8
編碼時,有包含 BOM (檔首),此時直接用utf-8
格式去讀取,第一個字元就會出現\ufeff
。這是因為存下來的格式跟我讀取時所設定的編碼格式不同才導致,解決方法就是設定成utf-8-sig
,就會自動去掉\ufeff
了。
應用範例
下面這個程式是我用來讀取INI組態設定檔的程式
from configparser import ConfigParser
def load_cfg(cfg_file):
config = {}
f = ConfigParser()
f.read(cfg_file, encoding="utf-8-sig") # "utf-8" --> "utf-8-sig"
sections = f.sections()
for section in sections:
config[section] = {}
options = f.options(section)
for op in options:
config[section][op] = null_proc(f.get(section, op))
return config
一開始我是照平常使用f.read(cfg_file, encoding="utf-8")
來讀取,因為錯誤編碼讀取導致我第一個字元是\ufeff
,變成後面程式無法正確判斷設定檔的架構。
之後更改成f.read(cfg_file, encoding="utf-8-sig")
之後,就可以正常執行function了。
結語
看來有機會可以研究看看怎麼自動判斷編碼格式的功能。