解决错误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')

 

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

 

 

上一篇:Ajax方式上传文件报错"Uncaught TypeError: Illegal invocation"


下一篇:mysql进行like查询时报错Illegal mix of collations for operation 'like'