码迷,mamicode.com
首页 > 编程语言 > 详细

Python3 关于UnicodeDecodeError/UnicodeEncodeError: ‘gbk’ codec can’t decode/encode bytes类似的文本编码问题

时间:2016-02-15 00:51:31      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:

  以下是小白的爬虫学习历程中遇到并解决的一些困难,希望写出来给后来人,如有疏漏恳请大牛指正,不胜感谢!

  首先,我的代码是这样的

1 
2 
3 import requests
4 
5 url = http://www.acfun.tv/ 
6 html = requests.get(url)
7 
8 print(html.text)

 

python2中解决方法(题外话)

参考:http://www.cnblogs.com/zhaoyl/p/3770340.html

在前面加上以下代码即可

import sys 
reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入 
sys.setdefaultencoding(utf-8)

一般就能解决了

 

 

而在Python3中:

如果在控制台中运行,就遇到了如下的UnicodeEncodeError:

  

技术分享

 

1.原因

  #参考了http://www.tuicool.com/articles/nEjiEv

  首先,代码中的html.text会自动将获取的内容解析为unicode  (与html.content不同。两者区别就是html.content的类型是bytes,而html.text类型是str,bytes通过解码(decode)可以得到str,str通过编码(encode)得到bytes)    html.text这种字符串如果要输出应当用utf-8来编码。而cmd中,(对于多数中国人所用的是中文的系统)默认字符编码是gbk

  从而导致此种现象:

  python要将utf-8编码的字符串,在gbk的cmd的中打印出来。于是出现了编码错误

2.解决方法

  原文中在贴了含有真正解决方法的网页的网址,http://www.crifan.com/summary_python_2_x_common_string_encode_decode_error_reason_and_solution/

而我怎么都打不开。

  我最终办法就是使用Pycharm这个IDE来运行查看结果,中文部分就能正常显示了。

  至于如何在cmd上解决print的问题我仍然不知道如何解决。

技术分享

 

  

 

写入文件时引发的UnicodeEncodeError:

参考:https://segmentfault.com/a/1190000004269037

  在测试过程中多次出现在写入文件时报告错误“UnicodeEncodeError: ‘ascii‘ codec can‘t encode character ‘\u56de‘ in position 0: ordinal not in range(128)”,这是由于我们在抓取网页的时候采用的是UTF-8编码,而存储时没有指定编码,在存储到文件的过程中就会报错。

  解决办法为:
在读取文件时加入指定UTF-8编码的选项

f = open(content.txt,a,encoding=UTF-8)

 

另外需要注意的是使用requests获取到网页之后同样要指定编码

html = requests.get(url)
html = re.sub(rcharset=(/w*), charset=UTF-8, html.text)

 

Python3 关于UnicodeDecodeError/UnicodeEncodeError: ‘gbk’ codec can’t decode/encode bytes类似的文本编码问题

标签:

原文地址:http://www.cnblogs.com/worstprogrammer/p/5189758.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!