你有看见我弄丢了的那只喵吗

python3.X编码错误:UnicodeDecodeError: ‘GB2312’ codec can’t decode

BIGGER SLY 3595℃ 0评论

你非常幸运的看到这篇文章,因为作为新手,你狠困扰的爬虫抓取的编码问题得到解决!

本人版本使用的是3.4最新版本,最近才学习python爬虫。然而我学了一会廖雪峰的教程耐不住性子去看爬虫了。

截取的代码如下
import urllib.request
url= ‘http://www.163.com’
content = urllib.request.urlopen(url).read()
content = content.decode(‘gbk’)
print(content)

因为我提前看了一下163网页的代码,是charset=gb2312

<meta http-equiv=”Content-Typecontent=”text/html; charset=gb2312” />

所以我直接用的gbk解码,因为gbk包含gb2312

但是我一运行,就发现

搜狗截图_2015-08-22_10-20-19

我来看一下bug思路

1.编码问题

我很郁闷,然后就在python群里问问,有人和我说换成什么什么gb2312 gbk utf-8 cp1800什么都来了,我直接就是阿西吧。

2.版本问题

后来有群友说python2.7 完美运行

我又下载python2.7版本来test

搜狗截图_2015-08-22_10-22-54

搜狗截图_2015-08-22_10-23-26

 

可以看到2.7在我删除request之后完美运行,那么我们的怀疑是正确的,可是为什么2.7 可以完美运行呢?

之后我百度

http://blog.sina.com.cn/s/blog_940224600101499e.html

可以看到有这样一段话

1.觉得很奇怪的一点是,这个脚本,一直是可以正常运行的,怎么突然就出现了语法错误了。

然后发现是带有中文的代码,会出现错误。

第一反应是,可能是安装了那个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解压函数,原来就是调用一下就可以。

搜狗截图_2015-08-22_10-35-35

好,让我们把gzip加上

 

在运行,发现成功了O(∩_∩)O哈哈~

 

搜狗截图_2015-08-22_10-37-38

 

转载请注明:灯塔水母 » python3.X编码错误:UnicodeDecodeError: ‘GB2312’ codec can’t decode

喜欢 (3)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)个小伙伴在吐槽
  1. 很赞的文章,感谢分享 😀
    米扑博客2018-05-22 18:59 回复