Python3:出现 'gbk' codec can't decode byte illegal multibyte sequence的可能解决办法
前提是要确定内容确实声明是gbk
编码,一般出现这个错误是不能解码如0xff
、0xae
之类的。
根据我排查的原因,似乎是抓取的网页虽然是gbk
编码,但内容中有用户上传的文字,而这些文字本身的编码不是gbk
,所以即使在网页中,本身也显示的是乱码。
解决的方法很粗暴,直接给decode()
函数添加参数。
一般调用decode()
函数都是decode('gbk')
,此时隐含的另一个参数是'strict'
,即出现解码错误即抛出UnicodeError
错误;这里使用参数'ignore'
,即出现解码错误直接忽略,不抛出任何异常。实际上还可以设置为'replace'
,即对解码出错的地方进行替换。
import urllib.request
r = urllib.request.urlopen('http://www.njust.edu.cn')
con = r.read()
dec = con.decode('gbk', 'ignore')
print(dec)