UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd3 in position 259: invalid continuation byte 問題的解決


0x00 問題引出:

  最近在練習python爬蟲的時候,需要爬取網頁。 
在使用urllib獲取reqest的response的時候,還要進行解碼。 
見語句:

 content = urllib.request.urlopen(request).read().decode()

 


當執行該語句的時候,會造成異常:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd3 in position 259: invalid continuation byte

 


0xd3 問題分析
該情況是由於出現了無法進行轉換的 二進制數據 造成的,可以寫一個小的腳本來判斷下,是整體的字符集參數選擇上出現了問題,還是出現了部分的無法轉換的二進制塊:

#python3
#以讀入文件為例:

f = open("data.txt","rb")#二進制格式讀文件
while True:
line = f.readline() if not line: break else: try: #print(line.decode('utf8')) line.decode('utf8') except: print(str(line))

 

  1.如果是字符集出現錯誤,建議多選擇幾種字符集測試一下: 選擇的經驗是: 如果是爬取到的網頁文件,可以查看網頁文件的meta標簽下的charset屬性值。

例如:

<meta charset="UTF-8">

 

 也可以使用notepad++打開,查看下右下角的部位,會指示該文件是那種編碼。

  2.有的情況,是這樣的,整個文件是好的,如果用notepad++打開后,能夠看到文件是可以打開的,似乎什么問題都沒有發生過,但是,用python進行解碼的時候,卻會出現錯誤。原因是因為這里的0xd3,這是無法轉換出來的部分,這是不屬於編碼字符集中的部分。所以,在進行編碼轉換的時候,會報錯。

0xd3 解決方法
修改字符集參數,一般這種情況出現得較多是在國標碼(GBK)和utf8之間選擇出現了問題。
出現異常報錯是由於設置了decode()方法的第二個參數errors為嚴格(strict)形式造成的,因為默認就是這個參數,將其更改為ignore等即可。例如:

line.decode("utf8","ignore")

 

問題解決


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM