Python: 讀取文件開頭出現\ufeff - 羔羊的實驗紀錄簿
文章推薦指數: 80 %
今天讀取影像感測器存出來的參數時,發現讀進來的檔案多了 \ufeff 這個 ... 當文件儲存 utf-8 編碼時,有包含BOM (檔首),此時直接用 utf-8 格式去讀 ...
Home
Blog
Profile
Github
Home
Blog
Profile
Github
羔羊的實驗紀錄簿
程式|生活隨筆
分類
C/C++
C#
DIY
FDTD
MachineLearning
DeepLearning
PySide2/PyQt5
Python
光學
影像處理
日常隨筆
網站相關
Bootstrap
CSS
JavaScript
PHP
WordPress
開發板
Arduino
Beaglebone
羔羊的實驗紀錄簿
程式|生活隨筆
分類
C/C++
C#
DIY
FDTD
MachineLearning
DeepLearning
PySide2/PyQt5
Python
光學
影像處理
日常隨筆
網站相關
Bootstrap
CSS
JavaScript
PHP
WordPress
開發板
Arduino
Beaglebone
前言
今天讀取影像感測器存出來的參數時,發現讀進來的檔案多了\ufeff這個東西,也因為這樣我的程式一直錯誤不能成功執行。
解決辦法
當文件儲存utf-8編碼時,有包含BOM(檔首),此時直接用utf-8格式去讀取,第一個字元就會出現\ufeff。
這是因為存下來的格式跟我讀取時所設定的編碼格式不同才導致,解決方法就是設定成utf-8-sig,就會自動去掉\ufeff了。
應用範例
下面這個程式是我用來讀取INI組態設定檔的程式
fromconfigparserimportConfigParser
defload_cfg(cfg_file):
config={}
f=ConfigParser()
f.read(cfg_file,encoding="utf-8-sig")#"utf-8"-->"utf-8-sig"
sections=f.sections()
forsectioninsections:
config[section]={}
options=f.options(section)
foropinoptions:
config[section][op]=null_proc(f.get(section,op))
returnconfig
一開始我是照平常使用f.read(cfg_file,encoding="utf-8")來讀取,因為錯誤編碼讀取導致我第一個字元是\ufeff,變成後面程式無法正確判斷設定檔的架構。
之後更改成f.read(cfg_file,encoding="utf-8-sig")之後,就可以正常執行function了。
結語
看來有機會可以研究看看怎麼自動判斷編碼格式的功能。
留下一個回覆取消回覆發佈留言必須填寫的電子郵件地址不會公開。
必填欄位標示為*顯示名稱*
電子郵件地址*
個人網站網址
在瀏覽器中儲存顯示名稱、電子郵件地址及個人網站網址,以供下次發佈留言時使用。
評論
延伸文章資訊
- 1Why UTF-8 BOM bytes efbbbf can be replaced by \ufeff?
The byte order mark (BOM) is a Unicode character, U+FEFF BYTE ORDER MARK (BOM), whose appearance ...
- 2ufeff的解决方法_51CTO博客
\ufeff的解决方法. 用"utf-8"编码方式读取带有BOM的文件时,它会把BOM当做是文件内容来处理, 也就会发生错误. 解决方法.
- 3java讀取文字檔案異常 - 程式人生
百度搜了一下這個uFEFF 原因如下在Windows下用文字編輯器建立的文字檔案,如果選擇以UTF-8等Unicode格式儲存,會在檔案頭(第一個字元)加入一個BOM ...
- 4位元組順序記號 - 维基百科
位元組順序記號(英語:byte-order mark,BOM)是位於碼點 U+FEFF 的統一碼字符的名称。當以UTF-16或UTF-32來將UCS/統一碼字符所組成的字串編碼時,這個字符被用來...
- 5java utf-8帶bom格式內容(帶"\uFEFF")轉換成utf-8格式- 台部落
java utf-8帶bom格式內容(帶"\uFEFF")轉換成utf-8格式. 原創 HiWorldNice 2020-06-20 04:48. 從txt文件中讀取一串字符串和數據庫中另一串字...