python中文乱码怎样解决?一文带你看懂
Admin 2021-06-01 群英技术资讯 836 次浏览
这篇文章给大家分享的是如何解决python中文乱码的问题,下文有多种python中文乱码的情况以及解决办法的介绍,小编觉得挺实用的,因此分享给大家做个参考,接下来一起跟随小编看看吧。
在运行这样类似的代码:
#!/usr/bin/env pythons="中文"print s
最近经常遇到这样的问题:
SyntaxError: Non-ASCII character '\xe4' in file E:\coding\python\Untitled 6.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 108: ordinal not in range(128)
UnicodeEncodeError: 'gb2312' codec can't encode character u'\u2014' in position 72366: illegal multibyte sequence
这些都是跟字符编码有关的问题,很郁闷,中文总是弄不出来,找了很多方案,这里有些是我前几天找到的一些方案,拿出来给大家分享一下哈
字符串在Python内部的表示是unicode 编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。
在某些IDE中,字符串的输出总是出现乱码,甚至错误,其实是由于IDE的结果输出控制台自身不能显示字符串的编码,而不是程序本身的问题。
如在UliPad中运行如下代码:
s=u"中文"print s
会提示:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
这是因为UliPad在英文WindowsXP 上的控制台信息输出窗口是按照ascii编码输出的(英文系统的默认编码是ascii),而上面代码中的字符串是Unicode编码的,所以输出时产生了错误。将最后一句改为:print s.encode('gb2312')
则能正确输出“中文”两个字。若最后一句改为:print s.encode('utf8'),
则输出:\xe4\xb8\xad\xe6\x96\x87
,这是控制台信息输出窗口按照ascii编码输出utf8编码的字符串的结果。
下面代码可能比较通用一些,如下:
#!/usr/bin/env python
#coding=utf-8
s="中文"if isinstance(s,unicode):
#s=u"中文"
print s.encode('gb2312') else:
#s="中文"
print s.decode('utf-8').encode('gb2312')
#!/usr/bin/env
python#coding=utf-8s="中文"
if isinstance(s,unicode):
#s=u"中文" print s.encode('gb2312')else:
#s="中文" print s.decode('utf-8').encode('gb2312')
看看下面一段代码:
#!/usr/bin/env python
#coding=utf-8
#python version:2.7.4 #system:windows xp
import httplib2def getPageContent(url):
'''''
使用httplib2用编程的方式根据url获取网页内容
将bytes形式的内容转换成utf-8的字符串
'''
#使用ie9的user-agent,如果不设置user-agent将会得到403禁止访问
headers={'user-agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
'cache-control':'no-cache'}
if url:
response,content= httplib2.Http().request(url,headers=headers)
if response.status== 200 :
return content
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
#修改默认编码方式,默认为ascci print sys.getdefaultencoding()
content= getPageContent("http://www.oschina.net/")
print content.decode('utf-8').encode('gb2312')
#!/usr/bin/env
python#coding=utf-8
#python version:2.7.4
#system:windows xpimport httplib2def getPageContent(url):
'''
使用httplib2用编程的方式根据url获取网页内容
将bytes形式的内容转换成utf-8的字符串 '''
#使用ie9的user-agent,如果不设置user-agent将会得到403禁止访问
headers={'user-agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
'cache-control':'no-cache'} if url:
response,content= httplib2.Http().request(url,headers=headers)
if response.status== 200 : return content
import sysreload(sys)sys.setdefaultencoding('utf-8')
#修改默认编码方式,默认为ascciprint sys.getdefaultencoding()content= getPageContent("//www.jb51.net/")
print content.decode('utf-8').encode('gb2312')
上面的代码的意思:向www.jb51.net网站请求他的主页,(如果直接是utf-8编码,不能输出中文)想将编码方式为utf-8转向gd2312,出现问题三
当我把它将print content.decode('utf-8').encode('gb2312')
改成print content.decode('utf-8').encode('gb2312', ‘ignore')
时,OK了,可以显示中文了,但不敢确定是否为全部,貌似只有部分吧,有些不能用gb2312编码。然而,当我把网站换成 www.soso.com时,不用转为gb2312,用utf-8即可正常显示中文
总结一下:
向文件直接输出ss会抛出同样的异常。在处理unicode中文字符串的时候,必须首先对它调用encode函数,转换成其它编码输出。这一点对各个环境都一样。在Python中,“str”对象就是一个字节数组,至于里面的内容是不是一个合法的字符串,以及这个字符串采用什么编码(gbk, utf-8, unicode)都不重要。这些内容需要用户自己记录和判断。这些的限制也同样适用于“unicode”对象。要记住“unicode”对象中的内容可绝对不一定就是合法的unicode字符串,我们很快就会看到这种情况。在windows的控制台上,支持gbk编码的str对象和unicode编码的unicode对象。
以上就是关于python中文乱码的相关介绍,有需要的朋友可以参考参考,希望能对大家有帮助,更多python中文乱码解决方法,大家可以关注其他文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
今天给大家带来的是关于Python的相关知识,文章围绕着python csv的一些基本操作展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
python如何识别围棋定位棋盘位置?首先要将棋盘位置定位出来,下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。
使用 Python 发送 请求Python 发送请求的方式requests 库的配置天行数据 - 空气质量接口利用 requests 发送查询 空气质量接口 请求在前文说过,如果想要更好的做接口测试
python APScheduler定时任务执行,下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。
如何使用pytorch加载并读取COCO数据集 环境配置基础知识:元祖、字典、数组利用PyTorch读取COCO数据集利用PyTorch读取自己制作的数据集
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008