Python 讀取文件首行多了"\ufeff"字符串
python讀取B.txt文件時,控制台打印首行正常,但是若是用首行內容打開文本的話,就會報錯:
Traceback (most recent call last): A File "E:/python project/multiProcess/test.py", line 32, in <module> with open("%s.txt" % line, 'r', encoding='utf-8') as f1: FileNotFoundError: [Errno 2] No such file or directory: '\ufeffA.txt'
要打開的路徑比預期A.txt多了一串字符"\ufeff", 顯然無法正確打開文件.
解決方案:
在讀取B.txt 時,指定編碼方式為 "utf-8-sig"即可 如下:
with open("B.txt", 'r', encoding='utf-8-sig') as f: line = f.readline()[0:-1] #去掉末尾換行符 print(line) with open("%s.txt" % line, 'r', encoding='utf-8') as f1: print(f1.readline()) f1.close() f.close()
首行出現的”\ufeff“叫BOM("ByteOrder Mark")用來聲明該文件的編碼信息.
”utf-8“ 是以字節為編碼單元,它的字節順序在所有系統中都是一樣的,沒有字節序問題,因此它不需要BOM,所以當用"utf-8"編碼方式讀取帶有BOM的文件時,它會把BOM當做是文件內容來處理, 也就會發生類似上邊的錯誤.
"uft-8-sig"中sig全拼為 signature 也就是"帶有簽名的utf-8", 因此"utf-8-sig"讀取帶有BOM的"utf-8文件時"會把BOM單獨處理,與文本內容隔離開,也是我們期望的結果.
原文:https://blog.csdn.net/wozaizhe56/article/details/82048645
-
摘要:問題描述:json.loads(text,encoding='utf8')報UnexpectedUTF-8BOM(decodeusingutf-8-sig)錯誤,將encoding改為'utf-8-sig'仍然報錯。原因分析:text包含BOM字符解決方案:將BOM頭去掉
-
問題描述:
json.loads(text,encoding='utf8') 報Unexpected UTF-8 BOM (decode using utf-8-sig)錯誤,將encoding改為'utf-8-sig'仍然報錯。
原因分析:
text包含BOM字符
解決方案:
將BOM頭去掉,代碼如下:
if text.startswith(u'/ufeff'): text = text.encode('utf8')[3:].decode('utf8')
鏈接:https://www.jianshu.com/p/f94b3fc04f5b