Python3.X 中文字符编码错误:UnicodeDecodeError: ‘GB2312’ codec can’t decode
你非常幸运的看到这篇文章,因为作为新手,你狠困扰的爬虫抓取的编码问题得到解决!
本文系统环境:Windows 7 + Python 3.4
演示的代码如下
import urllib.request url= 'https://www.mimvp.com' content = urllib.request.urlopen(url).read() content = content.decode(‘gbk’) print(content)
因为我提前看了一下163网页的代码,是charset=gb2312
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312” />
所以我直接用的gbk解码,因为gbk包含gb2312
但是我一运行,就发现
看一下bug思路
1. 编码问题
编码换成 gb2312、gbk、utf-8、cp1800 等等,结果没有解决
2. 版本问题
有群友说python2.7 完美运行,又下载python2.7版本来test,果然正常
可以看到2.7在我删除request之后完美运行,那么我们的怀疑是正确的,可是为什么2.7 可以完美运行呢?
觉得很奇怪的一点是,这个脚本,一直是可以正常运行的,怎么突然就出现了语法错误了。
然后发现是带有中文的代码,会出现错误。
第一反应是,可能是安装了那个python的Python Imaging Library (PIL)库,然后影响了当前的python 2.7.2版本的语法了,影响成为类似于python 3.x的语法了。
因为之前试过,python 3.x版本中,对于上述写法,即u加上中文,比如:
u'这是中文',是不支持的。而python 2.x的语法是支持的,表示这个字符是unicode的字符,会自动处理编码,成为unicode变量的。
也就是说python在中文编码一块简直蛋痛,虽然知乎上经常就说3.x如何如何对中文支持很流畅,但是爬虫我一点没感觉到。
3. 其他问题
因为知乎推荐的问题,我不想把爬虫给我换回去了,就想办法在3.X的情况下解决这个编码问题,但是每次弹出0X8b无法被decode我都很想问候他们python新版本的家人。
最后在一个不起眼的角落看到了这个:
链接没找到,大概就是一句话:如果出现UnicodeDecodeError: ‘utf-8’ codec can’t decode 请删除header中gzip的语句。
总所周知,gzip在网页中用于压缩是传输速度更快,刚好python群里那个友人提到gzip有可能成为无法解码的问题所在。
然后在 http://www.yiibai.com/python/python3-webbug-series4.html
看到中间有用gzip解压函数,原来就是调用一下就可以。
好,让我们把gzip加上
import gzip import urllib.request url= 'http://www.163.com' content = urllib.request.urlopen(url).read() content = gzip.decompress(content) content = content.decode('gbk') print(content)
运行,发现成功了
原文转自:python3.X编码错误:UnicodeDecodeError: ‘GB2312’ codec can’t decode
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-08-16 05:57:06
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: Python3.X 中文字符编码错误:UnicodeDecodeError: ‘GB2312’ codec can’t decode (米扑博客)