Python3 報 'gb2312' codec can't decode byte 0x89 in position 42485: illegal multibyte sequence 解決方法

前言

關於字符編碼問題在Py2中常常碰到,可是Py3在字符編碼這塊作了很多的改進,可是有些特殊狀況下仍是會出現問題。今天碰到了一個神奇的字符問題...瀏覽器

博主以前寫過一個網站的爬蟲,去定時爬某個站點的評論內容,已經穩定運行兩個月,每次抓取完成後會推送一條微信消息到手機上,可是這兩週以來一直沒有推送,以爲很奇怪,難道網站內容改版了?服務器

分析

因爲腳本跑在美國VPS服務器上,先使用瀏覽器打開網站查看網頁源代碼,發現網站結構並無變,難道是登陸的session失效了?由於以前出現過session失效的狀況,那是由於兩次抓取中間間隔時間太長致使的,後來調整到每個小時都去請求一個,以保證session存活。按照道理來講不該該出現session失效的問題,由於腳本自動運行的時候會在天天0點10分的時候進行簽到操做,簽到完成也會推送微信消息,這個簽到消息一直都是正常的,只有抓取出現了問題。微信

看來只能把腳本拖下來調試了,本地運行腳本,提示錯誤cookie

'gb2312' codec can't decode byte 0x89 in position 42485: illegal multibyte sequence

神奇了,這個問題以前都沒有出現過,再次打開網站查看源代碼發現編碼並無變,肯定是gb2312沒有問題的,神奇了,既然頁面上編碼是正確的,爲什麼會報錯呢?session

根據以前作過微信相關應用的經驗想到會不會是由於一些字符致使的解碼失敗,好比一些神奇的表情或者泰國文字,若是是這樣那就簡單了,使用一種範圍更大的字符編碼進行解碼應該就能夠了。網站

根據谷歌結果得知使用gb18030便可,修改代碼後成功解碼無報錯編碼

jifen_data = s.get(url=url_jifen, headers=headers, cookies=cookies_pc, timeout=10).content.decode('gb18030')

參考

http://blog.csdn.net/junkichan/article/details/51913845url

相關文章
相關標籤/搜索