Python處理Windows記事本utf8編碼文件要注意的坑

以Win 10為例,假設當前文件夾中有個ANSI編碼的文本文件data.txt,其中包含若干行文本,每行存放一個整數,例如:

編寫程式讀取其中的每行數字,加5之後輸出,程式碼如下:

接下來,使用記事本打開文件data.txt,然後另存為UTF8編碼格式,

然後修改程式碼,使用UTF8編碼格式,程式碼出錯,

根據異常資訊可以發現,莫名其妙多出來一個字元,ufeff,然而輸出文件內容時卻又沒有這個符號,例如,

出現這個錯誤的原因在於,Windows系統的記事本程式轉換為UTF8時,會在文件頭增加BOM(Byte Order Mark),也就是標誌位ufeff,這個符號使用print()輸出時不可見,使用repr()函數轉換一下,

Windows記事本轉換為UTF8編碼時加BOM本身並沒有對與錯,但是沒有明確說明就不合適了,還是notepad++人性化一些,明確對不帶BOM的utf8和帶BOM的utf8做了區分,例如,

不管怎麼樣,明白了原因之後,處理就容易了,可以手動刪除這個符號,

或者,改用utf-8-sig編碼格式來讀取內容,

Tags: