python 讀取帶BOM的utf-8格式文件

UTF-8分為兩種,一種是不帶BOM的,一種是帶BOM的。其中第一種不帶BOM的是標(biāo)準(zhǔn)形式,第二種帶BOM的主要是微軟的習(xí)慣。

微軟在UTF-8中使用BOM(Byte order mark)是因為這樣可以將UTF-8和ASCII等編碼明確區(qū)分開。?

windows對于utf-8格式的文件存儲默認是帶有BOM的格式

因為在UNIX環(huán)境下,很多的UNIX程序不認識BOM。主要是在UNIX所有腳本語言首行為#!標(biāo)示,它依賴于shell解析,而很多shell出于兼容的考慮不檢測BOM,所以加進BOM時shell會把它解釋為某個普通字符輸入導(dǎo)致破壞#!標(biāo)示。比如很多現(xiàn)代腳本語言,例如python,其解釋器本身是能處理BOM的,但是shell卡在這里。?

因此我們在linux服務(wù)器上讀取這些txt文件時,會遇到如下報錯:?

\xef\xbb\xbf…

解決方法

import codecs

with open("xx.txt",'r','utf-8-sig') as file:

? ? ? ? line = file.readlines()

或者:

#打開文件,此次應(yīng)指定編碼,

fr=open(filename,'r',encoding='utf-8')

#讀取文件所有內(nèi)容

arrayOLines=fr.readlines()

#針對有BOM的UTF-8文本,應(yīng)該去掉BOM,否則后面會引發(fā)錯誤。

arrayOLines[0]=arrayOLines[0].lstrip('\ufeff')

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容