其他分享
首页 > 其他分享> > 解决错误UnicodeDecodeError: 'gb2312' codec can't decode byte 0x8b in position 1: illegal

解决错误UnicodeDecodeError: 'gb2312' codec can't decode byte 0x8b in position 1: illegal

作者:互联网

报错的代码:

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')

 

再运行代码,发现这个问题已经解决了(如果你看了我前面一篇双色球分析的程序,现在应该知道为什么有时会报错了~~)

 

 

标签:content,0x8b,sequence,read,illegal,gb2312,decode,报错,page
来源: https://www.cnblogs.com/kusy/p/10847274.html