Python中文编码大合集
off999 2024-11-25 15:56 61 浏览 0 评论
本文整理了关于Python中文编码的最强合集,以下就是全部内容,希望可以对您的学习有所帮助。
在Python中使用中文
在Python中有两种默认的字符串:str和unicode。在Python中一定要注意区分“Unicode字符串”和“unicode对象”的区别。后面所有的“unicode字符串”指的都是python里的“unicode对象”。
事实上在Python中并没有“Unicode字符串”这样的东西,只有“unicode”对象。一个传统意义上的unicode字符串完全可以用str对象表示。只是这时候它仅仅是一个字节流,除非解码为unicode对象,没有任何实际的意义。
我们用“哈哈”在多个平台上测试,其中“哈”对应的不同编码是:
1.UNICODE(UTF8-16),C854;
2.UTF-8,E59388;
3.GBK,B9FE。
1.1Windows控制台
下面是在windows控制台的运行结果:
可以看出在控制台,中文字符的编码是GBK而不是UTF-16。将字符串s(GBK编码)使用decode进行解码后,可以得到同等的unicode对象。
注意:可以在控制台打印ss并不代表它可以直接被序列化,比如:
向文件直接输出ss会抛出同样的异常。在处理unicode中文字符串的时候,必须首先对它调用encode函数,转换成其它编码输出。这一点对各个环境都一样。
总结:在Python中,“str”对象就是一个字节数组,至于里面的内容是不是一个合法的字符串,以及这个字符串采用什么编码(gbk,utf-8,unicode)都不重要。这些内容需要用户自己记录和判断。这些的限制也同样适用于“unicode”对象。要记住“unicode”对象中的内容可绝对不一定就是合法的unicode字符串,我们很快就会看到这种情况。
总结:在windows的控制台上,支持gbk编码的str对象和unicode编码的unicode对象。
1.2WindowsIDLE(在Shell上运行)
在windows下的IDLE中,运行效果和windows控制台不完全一致:
可以看出,对于不使用“u”作标识的字符串,IDLE把其中的中文字符进行GBK编码。但是对于使用“u”的unicode字符串,IDLE居然一样是用了GBK编码,不同的是,这时候每一个字符都是unicode(对象)字符!!此时len(ss)=4。
这样产生了一个神奇的问题,现在的ss无法在IDLE中正常显示。而且我也没有办法把ss转换成正常的编码!比如采用下面的方法:
这有可能是因为IDLE本地化做得不够好,对中文的支持有问题。建议在IDLE的SHELL中,不要使用u“中文”这种方式,因为这样得到的并不是你想要的东西。
这同时说明IDLE的Shell支持两种格式的中文字符串:GBK编码的“str”对象,和UNICODE编码的unicode对象。
1.3在IDLE上运行代码
在IDLE的SHELL上运行文件,得到的又是不同的结果。文件的内容是:
直接运行的结果是:
毫无瑕疵,相当令人满意。我没有试过其它编码的文件是否能正常运行,但想来应该是不错的。
同样的代码在windows的控制台试演过,也没有任何问题。
1.4WindowsEclipse
在Eclipse中处理中文更加困难,因为在Eclipse中,编写代码和运行代码属于不同的窗口,而且他们可以有不同的默认编码。对于如下代码:
#!/usr/bin/python
#-*-coding:utf-8-*-
s="哈哈"
ss=u'哈哈'
printrepr(s)
printrepr(ss)
prints.decode('utf-8').encode('gbk')
printss.encode('gbk')
prints.decode('utf-8')
printss
前四个print运行正常,最后两个print都会抛出异常:
'/xe5/x93/x88/xe5/x93/x88'
u'/u54c8/u54c8'
哈哈
哈哈
Traceback(mostrecentcalllast):
File"E:/Workspace/Eclipse/TestPython/Test/test_encoding_2.py",line13,in<module>
prints.decode('utf-8')
UnicodeEncodeError:'ascii'codeccan'tencodecharactersinposition0-1:ordinalnotinrange(128)
也就是说,GBK编码的str对象可以正常打印,但是不能打印UNICODE编码的unicode对象。在源文件上点击“Runas”“Run”,然后在弹出对话框中选择“Common”:
可以看出Eclipse控制台的缺省编码方式是GBK;所以不支持UNICODE也在情理之中。如果把文件中的coding修改成GBK,则可以直接打印GBK编码的str对象,比如s。
如果把源文件的编码设置成“UTF-8”,把控制台的编码也设置成“UTF-8”,按道理说打印的时候应该没有问题。但是实验表明,在打印UTF-8编码的str对象时,中文的最后一个字符会显示成乱码,无法正常阅读。不过我已经很满足了,至少人家没有抛异常不是:)
BTW:使用的Eclipse版本是3.2.1。
1.5从文件读取中文
在window下面用记事本编辑文件的时候,如果保存为UNICODE或UTF-8,分别会在文件的开头加上两个字节“/xFF/xFE”和三个字节“/xEF/xBB/xBF”。在读取的时候就可能会遇到问题,但是不同的环境对这几个多于字符的处理也不一样。
以windows下的控制台为例,用记事本保存三个不同版本的“哈哈”。
打开utf-8格式的文件并读取utf-8字符串后,解码变成unicode对象。但是会把附加的三个字符同样进行转换,变成一个unicode字符,字符的数据值为“/xFF/xFE”。这个字符不能被打印。编码的时候需要跳过这个字符。
打开unicode格式的文件后,得到的字符串正确。这时候适用utf-16解码,能得到正确的unicdoe对象,可以直接使用。多余的那个填充字符在进行转换时会被过滤掉。
打开ansi格式的文件后,没有填充字符,可以直接使用。
结论:读写使用python生成的文件没有任何问题,但是在处理由notepad生成的文本文件时,如果该文件可能是非ansi编码,需要考虑如何处理填充字符。
1.6在数据库中使用中文
刚刚接触Python,我用的数据库是mysql。在执行插入、查找等操作时,如果运行环境使用的字符编码和mysql不一致,就可能导致运行时的错误。当然,和上面看到的情况一样,运行环境并不是关键因素,关键是查询语句的编码方式。如果在每次执行查询操作时都把查询字符串做一次编码转换,转变成mysql的默认字符编码,一样不会遇到问题。但是这样写代码也太痛苦了吧。
使用如下代码连接数据库:
self.conn=MySQLdb.connect(use_unicode=1,charset='utf8',**server)
我不能理解的是既然数据库用的默认编码是UTF-8,我连接的时候也用的是UTF-8,为什么查询得到的文本内容却是UNICODE编码(unicode对象)?这是MySQLdb库的设置么?
1.7在XML中使用中文
使用xml.dom.minidom和MySQLdb类似,对生成的dom对象调用toxml方法得到的是unicode对象。如果希望输出utf-8文本,有两种方法:
1.使用系统函数
在输出xml文档的时候进行编码,这是我觉得最好的方法。
xmldoc.toxml(encoding=’utf-8’)
xmldoc.writexml(outfile,encoding=‘utf-8’)
中文编码有很多,大家可以慢慢的学习,同时希望你可以有一个好的成绩。
相关推荐
- u盘最便宜多少钱一个(u盘最低价格)
-
一般情况下,一分钱,一分货;没有又便宜,货又好的事情。1、扩容盘。扩容盘是用PC技术,在量产时运用容量优先,输入了固定的容量,但它真实的容量只有标称容量的10倍左右。512M没人要的U盘扩容成4G,它...
- 小白三步装机教程(小白三步装机法)
-
下面给大家整理了一份小白装机的详细教程,有需要的朋友们快来看看吧!1、我们下载一个小白软件,然后选择了安装win7系统。2、在下载界面,下载速度取决于您的网络您只需要耐心等待即可。3、软件下载完成后会...
- winpe下载官网下载iso(winpe.iso下载)
-
你好,以winpe装win7iso系统说明安装步骤: 1、根据教程制作好winpe启动盘,然后将下载的win7iso系统文件直接复制到U盘的GHO目录下; 2、在需要装系统的电脑上...
- 把系统装在u盘(把系统装在u盘里的缺点)
-
系统装进U盘有效的方法。1、下载并且安装好大白菜装机版,打开安装好的大白菜装机版,插入u盘等待软件成功读取到u盘之后,点击“一键制作启动u盘”进入下一步操作:2、弹出的信息提示窗口中,选择自己下载的的...
- 恢复出厂设置对电脑有影响吗
-
电脑恢复出厂设置,对系统没有影响,原因如下:1、系统还原是电脑在使用中的一种正常运作,不还原电脑无法正常运行,系统还原是对电脑的维护,不会对电脑或系统造成损害。2、系统还原是一次大容量的数据读写、清除...
- 注册邮箱163免费登录入口官网
-
注册网易邮箱账号步骤如下:1、在浏览器的地址栏输入http://email.163.com/进入网易邮箱的登录页面,点击页面下方的立即注册2、点击立即注册进入邮箱的注册页面,点击页面上面的注册字母邮箱...
- 产品密钥win10专业版激活密钥免费
-
1不存在永久激活密钥,但可以使用一些有效期长的密钥去激活Win10专业版。2Windows10的激活方式是基于数字权利,当你购买Windows10时,系统会将您电脑的硬件信息和购买记录绑定在一起...
- ghostxp系统下载怎么安装教程
-
系统之家下载的XP系统通常是一个ISO镜像文件,安装这个系统需要通过一些步骤来制作可启动安装介质并进行系统安装。以下是安装的基本步骤:准备安装介质:使用工具如Rufus或AnyBurn将下载的ISO文...
- 无线网桥监控安装方法(无线网桥怎么连接监控)
-
网桥连接无线路由器安装的设置方法如下1.主路由器上网正常,副路由器LAN口插一根网线,另一头连接电脑。主副路由器不需要用网线连接。2.电脑开机输入副路由器背面的设置地址,进入登录界面输入背面的账号密码...
- 怎么对电脑文件夹加密(怎么对电脑文件夹加密码)
-
1.右键点要加密的文件或文件夹,然后单击“属性”;2.在“常规”选项卡,点击“高级”。选中“加密内容以便保护数据”复选框;3.在加密文件夹时,系统将询问是否要同时加密它的子文件夹。要如果选择是,那它的...
- windows系统下载手机(win10下载手机)
-
OPPO手机重新下载安装系统:先备份好重要数据!然后手机连接电脑把下载的固件存入手机。然后再长按电源键十秒钟进入关机状态(可拆卸电板的需取下电板然后重新安装)。再同时按住电源键跟音量减键,进入reco...
- 电脑系统分区怎么分(电脑系统分区怎么分区)
-
分区是将硬盘分割成不同的逻辑部分,每个分区可以被视为一个独立的存储设备。通过分区,可以更好地管理数据和操作系统。要进行电脑分区,可以按照以下步骤进行:1.确定分区方案:首先需要确定分区的目的和需求。...
- 电脑显卡怎么选择(电脑显卡怎样选择)
-
以下是一些通用的方法:1.在硬件层面进行配置:首先需要确认您的主板和操作系统是否支持多GPU并行,以及您的电源是否提供足够的功率支持。在BIOS中启用多GPU选项,并安装正确的驱动程序。然后,通...
- 设置软件下载(设置软件下载入口)
-
iphone13app的下载设置1、首先,打开手机桌面的【设置】。2、在设置界面,点击【面容ID与密码】。3、这时设置了键盘锁的会要求你输入键盘锁密码进入。4、进入之后,找到【iTunesStore...
- 电脑麦克风插孔是哪个(电脑麦克风插那)
-
1.蓝色的为音频输入口。一般的电脑后面都有三个音频接口:蓝色是音频输入,绿色是音频输出,粉红色麦克风。 2.音频输入(蓝色),为外接光驱.随身听及其它音频输入设备,即可以把外部的设备声音传送至电脑...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
