Python的编码问题

问题:

初学Python开发,今天拿简书小试了一下网络爬虫强大的Requests库:

import requests
r = requests.get('http://www.jianshu.com/')
print(r.status_code)
print(r.headers['content-type'])
print(r.text)

在Windows 10 的命令行中执行,没想到结果居然报错:

200
text/html; charset=utf-8
Traceback (most recent call last):  File "C:/Users/team/spider.py", line 8, inprint r.text
UnicodeEncodeError: 'gbk' codec can't encode character u'\xa9' in position 36179: illegal multibyte sequence

这么简单的代码,还碰到编码错误问题。挪到IDLE去检查一下,print(r.text)居然可以正常执行。

到baidu去google了一下,原来是由于本地系统是Windows中的cmd,默认codepage是CP936,即GBK的编码,所以需要将接收数据先编码为GBK,然后再在cmd中显示出来,然后由于r.text中包含一些GBK中无法显示的字符,导致此时提示“’gbk’ codec can’t encode”的错误的。最大的可能就是接收数据中Unicode类型的字符中,包含了一些无法转换为GBK编码的一些字符。

在对unicode字符编码时,添加ignore参数,忽略无法编码的字符,这样就可以正常编码为GBK格式,正确输出了。

import requests
r = requests.get('http://www.jianshu.com/')
print(r.status_code)
print(r.headers['content-type'])
print(r.text.encode('gbk','ignore'))

或者将其转换为GBK编码的超集GB18030 (即,GBK是GB18030的子集):

print(r.text.encode('gb18030'))

看来还是在windows下面编写python脚本,编码问题很严重。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 字符集和编码简介 在编程中常常可以见到各种字符集和编码,包括ASCII,MBCS,Unicode等字符集。确切的说...
    兰山小亭阅读 8,614评论 0 13
  • 字节字符串和字符字符串字节字符串s是在console上看着是中文,但是正在输出的确是字节字符串,而不是字符字符串。...
    大道至简_Andy阅读 573评论 0 1
  • Python3 最重要的一项改进之一就是解决了 Python2 中字符串与字符编码遗留下来的这个大坑。港真,就这一...
    布拉豆阅读 410评论 0 2
  • 在py文件开头 使用: 永久编码(推荐) 可以在python安装路径下的Lib\site-packages下新建文...
    cws阅读 338评论 0 1
  • 昨日看到微博上某位大咖发表的言论,大致的意思就是说2017年是直播年,群众们要做好准备,抓住机会云云。听了一...
    文说斌语阅读 625评论 0 1