python中文乱码总结

来源:互联网 发布:黑暗之魂1萝莉捏脸数据 编辑:程序博客网 时间:2024/05/22 03:29

1、python2中的字符编码
str每个字符由8位字节表示,unicode每个字是由16位二进制数字表示。
有一个中文字符串:“授权token过期”,可以保存成string类型,也可以保存成为unicode类型;


使用unicode编码,则为:
>>> t=u"\u6388\u6743token\u8fc7\u671f">>> print t授权token过期>>> print isinstance(t, unicode) True




使用string编码,则是:
>>> s="\xe6\x8e\x88\xe6\x9d\x83token\xe8\xbf\x87\xe6\x9c\x9f">>> print s


授权token过期
>>> print isinstance(s, str) True


注:还需要将客户端xshell的显示格式设置为Unicode(UTF-8),否则显示是乱码,而不是中文字符


2、requests中的response返回信息
在调用HTTP请求时使用requests进行封装,返回存放在Response对象里,这个对象的text是unicode,content字段是string类型,如下:
-> ret, content = self.process_request(method, url, headers, params)(Pdb) n-> if ret.status_code == 200:(Pdb) p ret.content '{"status":1,"info":"\xe4\xbb\xbb\xe5\x8a\xa1url\xe6\xa0\xbc\xe5\xbc\x8f\xe9\x94\x99\xe8\xaf\xaf\xe6\x88\x96\xe4\xb8\xba\xe7\xa9\xba","error_code":10001}'(Pdb) p ret.content.decode("utf-8") #将string转换成unicode编码u'{"status":1,"info":"\u4efb\u52a1url\u683c\u5f0f\u9519\u8bef\u6216\u4e3a\u7a7a","error_code":10001}'(Pdb) p ret.text u'{"status":1,"info":"\u4efb\u52a1url\u683c\u5f0f\u9519\u8bef\u6216\u4e3a\u7a7a","error_code":10001}'(Pdb) p ret.text.encode('utf-8') #将unicode转换成string'{"status":1,"info":"\xe4\xbb\xbb\xe5\x8a\xa1url\xe6\xa0\xbc\xe5\xbc\x8f\xe9\x94\x99\xe8\xaf\xaf\xe6\x88\x96\xe4\xb8\xba\xe7\xa9\xba","error_code":10001}'



3.一个例子

>>> m="授权token过期">>> print m授权token过期>>> print isinstance(m, str)True>>> print isinstance(m, unicode)False>>> >>> n=u"授权token过期">>> print n授权token过期>>> print isinstance(n, unicode)True>>> print isinstance(n, str)False>>> print m.decode('utf-8') #将string类型解码成utf类型,这时候shell设置为Unicode(UTF-8),则显示正常授权token过期>>> print m.decode('gbk') #将string类型解码成gbk类型,这时候shell设置为Unicode(UTF-8),则显示成乱码鎺堟潈token杩囨湡





0 0
原创粉丝点击