Python3中UnicodeEncodeError: 'gbk' codec can't encode character出错信息处理

Python018

Python3中UnicodeEncodeError: 'gbk' codec can't encode character出错信息处理,第1张

我用Sublime Text编写一个网络小程序时遇到UnicodeEncodeError: 'gbk' codec can't encode character错误,

很明显,这是编码的问题,requests返回的是utf-8编码,Sublime Text终端不能正常显示,通过如下设置,显示正常。

import requests

import sys

import io

sys.stdout = io.TextIOWrapper( sys.stdout.buffer, encoding='gb18030')  # 改变系统输出编码方式

然后再print(rhtml.text)就正常显示了。

url编码:

import urllib

url = 'http://test.com/s?wd=哈哈'   #如果此网站编码是gbk的话,需要进行解码,从gbk解码成unicode,再从Unicode编码编码为utf-8格式

url = url.decode('gbk', 'replace')

print urllib.quote(url.encode('utf-8', 'replace'))

参考资料

Python3 如何对url解码?.CSDN博客[引用时间2018-1-1]

python默认编码格式是utf-8。在python2.7中,可以通过sys.setdefaultencoding('gbk')设定默认编码格式,而在python3.3中sys.setdefaultencoding()这个函数已经没有了。在python3.3中该如何设置内置的默认编码格式啊!急求!!!

(类似于“#coding:gbk”这种就不必来说了。能让import sys print(sys.getdefaultencoding())输出“gbk“的大神请进!!!)

-----------------------------

python 3和2很大区别就是python本身改为默认用unicode编码。

字符串不再区分"abc"和u"abc", 字符串"abc"默认就是unicode,不再代表本地编码、

由于有这种内部编码,像c#和java类似,再没有必要在语言环境内做类似设置编码,比如“sys.setdefaultencoding”

也因此也python 3的代码和包管理上打破了和2.x的兼容。2.x的扩展包要适应这种情况改写。

另一个问题是语言环境内只有unicode怎么输出gbk之类的本地编码。

答按惯例都在(序列化)输出时才转换成本地编码。

比如

file.write("GBK的中文".encode("GBK"))

python环境内字符串用str.encode("GBK")方法输出成字节串用于和其他环境交流。