在大多數人使用Windows中文版本的情況下,使用Python從TXT文件中讀取數據時,初學者經常會遇到由於文檔編碼規則差異導致文檔讀取報錯,例如,如下報錯:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa7 in position 14: illegal multibyte sequence
從以上報錯可以看出,應該是萬國碼在轉換時出障礙,即GBK規則的文檔編碼無法正確解碼。那么這是為什么呢? 如何解決這個問題呢?
對於文檔編碼,在Windows環境下,我們幾乎很少注意文檔的編碼方式。但是幾乎可以判定,對於中文操作環境,必定是默認為Unicode編碼規則,而不是ASCII或者UTF編碼規則,這應該是大多數PC廠家的預裝的默認設置。(雖然,我覺得默認UTF應該更合理!優化內存的消耗。)
我使用的Excel創建的文檔,然后選擇另存為,果然,我發現默認的是Unicode,應該說找到了問題點。
鑒於學習需要,我們Python IDE,編譯器等以及文檔的Encoding 編碼規則起初均設置為UTF-8,所以,我所要提取的文檔應該也需要是UTF-8的編碼規則。
這個只要另存為的時候選擇編碼:UTF-8選項就可以了。
運行代碼如下:
f=open(r"D:\unDownload\Python video\userinfo.txt",'r')
s=f.read()
print(s)
結果發現,讀取的結果有兩個亂碼。返回原始文檔查看未發現該亂碼。
"D:\4 Python Learning\oldboy1\venv\Scripts\python.exe"
鍩縩ame Password EmployeeID Accountlooked
Jessica&&% love123 A000001
Richard ppl123 A000002
Jordan abc123 B000003
Jessica&&% love124 A000003
Richard hkp124 A000004
修改代碼如下,在調用Open打開文檔時,即聲明Encoding的編碼方式為UTF-8
f=open(r"D:\unDownload\Python video\userinfo.txt",'r',encoding="UTF-8")
s=f.read()
print(s)
運行結果如下:
name Password EmployeeID Accountlooked
Jessica&&% love123 A000001
Richard ppl123 A000002
Jordan abc123 B000003
Jessica&&% love124 A000003
Richard hkp124 A000004
Jordan abc124 B000004
Jessica&&% love125 A000005
Richard hhu125 A000006
發現,亂碼消失了。
通過以上可以確定,Open調用TXT文檔時,在Read()時,可能並不一開始就是用默認的編碼規則讀取,而是嘗試。這個要查看相關源碼才能確定。