Python

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了。

結語

看來有機會可以研究看看怎麼自動判斷編碼格式的功能。

留下一個回覆

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