python讀取B.txt文件時,控制檯打印首行正常,可是如果用首行內容打開文本的話,就會報錯:python
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", 顯然沒法正確打開文件.json
在讀取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")用來聲明該文件的編碼信息.spa
」utf-8「 是以字節爲編碼單元,它的字節順序在全部系統中都是同樣的,沒有字節序問題,所以它不須要BOM,因此當用"utf-8"編碼方式讀取帶有BOM的文件時,它會把BOM當作是文件內容來處理, 也就會發生相似上邊的錯誤..net
"uft-8-sig"中sig全拼爲 signature 也就是"帶有簽名的utf-8", 所以"utf-8-sig"讀取帶有BOM的"utf-8文件時"會把BOM單獨處理,與文本內容隔離開,也是咱們指望的結果.
原文:https://blog.csdn.net/wozaizhe56/article/details/82048645 code
摘要:問題描述:json.loads(text,encoding='utf8')報UnexpectedUTF-8BOM(decodeusingutf-8-sig)錯誤,將encoding改成'utf-8-sig'仍然報錯。緣由分析:text包含BOM字符解決方案:將BOM頭去掉blog
問題描述:utf-8
json.loads(text,encoding='utf8') 報Unexpected UTF-8 BOM (decode using utf-8-sig)錯誤,將encoding改成'utf-8-sig'仍然報錯。字符串
緣由分析:string
text包含BOM字符
解決方案:
將BOM頭去掉,代碼以下:
if text.startswith(u'/ufeff'): text = text.encode('utf8')[3:].decode('utf8')