UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 26269: illegal multibyte sequence
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2016-06-01 08:49:41
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
用python3.4 的urllib抓取百度的页面的时候出现以下错误
下面是代码
import urllib.request,chardet r=urllib.request.urlopen('https://www.baidu.com')#此处只是说明 re=r.read() charset=chardet.detect(re) chars=charset['encoding'] print(chars) strr=re.decode(chars) print(strr)
错误很奇怪输出时用的是utf-8的编码报错确是gbk
从上面报错可以看出页面已经解析出来是utf-8的 解码的时候也是用utf-8进行解码的,查看百度源码也是utf-8的这样来说应该是没有问题才对但是还是出现啦上面的报错
从报错上可以看出代码是运行到最后一个print(strr)后才出的错
经过查资料找到解决方法:原来是print()函数自身有限制,不能完全打印所有的unicode字符。
其实print()函数的局限就是Python默认编码的局限,因为系统是win7的,python的默认编码不是'utf-8',改一下python的默认编码成'utf-8'就行了
import urllib.request,chardet,io,sys sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码 r=urllib.request.urlopen('https://www.baidu.com/')#此处只是说明 re=r.read() charset=chardet.detect(re) chars=charset['encoding'] print(chars) strr=re.decode(chars) print(strr)
ok可以正常输出啦,
设置编码后不会发现在ide中可以正常显示,但是到啦控制台中文就显示成乱码啦,如果要在控制台下输出请设置成下面编码
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #改变标准输出的默认编码
最后,附上一些常用的和中文有关的编码的名称,分别赋值给encoding,就可以看到不同的效果了:
编码名称 | 用途 |
utf8 | 所有语言 |
gbk | 简体中文 |
gb2312 | 简体中文 |
gb18030 | 简体中文 |
big5 | 繁体中文 |
big5hkscs | 繁体中文 |
请注意上面贴出来的代码只是说明取百度的页面,要取回正常的页面要添加header头部信息,才能取到正常的页面