解決python錯誤 UnicodeDecodeError: 'gb2312' codec can't decode byte 0x8b in position 1: illegal multibyte sequence
阿新 • • 發佈:2019-05-11
family can accep div 分析 忽略 數據 程序 osi
報錯的代碼:
url= ‘http://kaijiang.500.com/shtml/ssq/19001.shtml‘ page =urllib.request.urlopen(url) content = page.read().decode(‘gb2312‘)
報這個錯的原因是獲取到的網頁內容是經過壓縮了的,打開url可以看到請求head
Accept-Encoding:gzip, deflate
一種方式是請求時把Accept-Encoding設為空,這樣的話網頁數據未壓縮,會相對比較大,增加網絡傳輸時間 另一種方式就是對請求後的數據解壓,顯然這個方式處理會更快,如下
content = gzip.decompress(page.read()).decode(‘gb2312‘)
可是修改之後發現運行還是報錯,這時候發現應該是因為網頁中含有編碼集之外的字符(網頁內容指定charset是gb2312),就算加到更大範圍還是報錯(PS:漢字字符集範圍 gb2312 < gbk < gb18030)
這時候選擇忽略這些無法解碼的字符
content = gzip.decompress(page.read()).decode(‘gb2312‘,‘ignore‘)
再運行代碼,發現這個問題已經解決了(如果你看了我前面一篇雙色球分析的程序,現在應該知道為什麽有時會報錯了~~)
解決python錯誤 UnicodeDecodeError: 'gb2312' codec can't decode byte 0x8b in position 1: illegal multibyte sequence