一、報錯場景
使用python遇到報錯:“UnicodeDecodeError: ‘gb2312’ codec can’t decode byte 0xa4 in position… : illegal multibyte sequence”一般有如下兩種場景:
1.爬取中文網站內容
html = urllib.request.urlopen(request).read().decode("gb2312")
2.讀取gbk編碼的文件
result = open(filename, 'r', encoding='gb2312')
二、報錯原因
gb2312收錄的中文字符集不夠全面,在遇到如繁體字的時候會出現解碼錯誤。
漢字字符集范圍 gb2312 < gbk < gb18030
三、報錯解決
1.忽略解碼錯誤
html = urllib.request.urlopen(request).read().decode('gb2312',errors = 'ignore')
decode函數默認的參數就是strict,decode([encoding], [errors='strict']),可以用第二個參數控制錯誤處理的策略,strict表示遇到非法字符時拋出異常;
如果設置為ignore,則會忽略非法字符;
如果設置為replace,則會用?取代非法字符;
2.將gbk2312替換為中文字符集更全面的gbk
result = open(filename, 'r', encoding='gbk')