只要坚持就能成功!
大家好我是雪山凌狐!
欢迎多多访问学习雪山凌狐教程!
热烈庆祝“雪山凌狐教程”优酷自频道获得优酷原创认证!更多精彩内容等你来学习!视频播放量已经突破6.0万!
自频道地址:http://i.youku.com/i/xueshanlinghu888
相信学习python的同学或多或少都经历过中文乱码的窘境,最近我在弄一些python的脚本的时候也遇到了这样的难题。以我安装的python2.7版本为例,来给大家讲讲中文输入如何不乱码的来龙去脉。
首先我们来谈一谈编码这个东西,由于计算机是美国人发明的,最早的编码里面仅仅有数字字母以及一些符号,不包含中文汉字,这个编码表我们常称为ASCII码表。
而要处理中文的时候,原来的ASCII码表就不够用了,需要使用两个字节来保存一个汉字,于是中国制定了GB2312编码,不会与原来的ASCII码表冲突,又可以用来表示中文汉字。但中国会把汉字弄成GB2312编码(也可以叫GBK编码),其他国家比如韩国会把韩文弄一个编码集,日本会弄一个日文编码集,因此在多语种文本中,这样的编码就势必会造成编码冲突,显示出来的时候,呈现出所谓的乱码。
因此,Unicode编码诞生了,这种编码可以把所有的语言都放到一种编码之中,这样就不会有乱码出现了。默认来讲,Unicode编码占用2个字节(一些偏僻文字可能占用4个),Ascii码占用一个字节。如果都用Unicode编码来写文件,那乱码肯定消失了,但你会发现,如果你的文件绝大多数文字都是一些ascii码可以覆盖的内容的话,使用Unicode的编码就会极大的占用空间了。
因此,又发明了可变长编码“UTF8”(或utf-8)。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。
大概的知识就是这样,因此我们总结出了现在常见的ASCII,Unicode,utf-8三种编码。
由于python比unicode的诞生还要早,因此最早的python只支持ascii码,而后来的版本python加入了unicode的支持。
前面我们提到,在这种情况下,使用utf8编码来支持中文是最好的,因此我们在写一个python源码文件时,最好的办法是保存成一个utf8无BOM编码文件,这样的文件你使用notepad++这样的高级文本编辑器软件就可以保存(软件自己百度,免费下载)。
当python解释器读取这样的源码时,为了让它按照utf8读取,通常我们会在整个文件的前两行加上这两行代码:
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释。
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
同时,在源码中,用到中文输出的地方,中文字符串要转变成unicode字符串:
这样就能保证正常显示汉字了。
当你使用raw_input时,由于本命令的参数不支持直接传入unicode,需要一个文本字符串传入,因此如果你直接这样写:
python就会报错,因此需要将字符串编码成gbk格式即可让我们看到正常的汉字:
当你需要大量使用这样的转换的时候,你可以设置默认编码格式:
也许是Python的bug在后必须再一次,下面去设置默认字符编码的语句才能生效。
如果是要将中文写到某些文件里面,比如写入数据库里面,那么一般会写成utf8编码,这种情况下,上面的那几行设置默认编码的代码要改成:
相信在本节课的学习之后,大家对于在python中显示中文汉字以及输出中文汉字有了一个大致的了解,祝大家编码顺利!
感谢大家的收看,我们下期再见!
扫码订阅ID:xueshanlinghu888
领取专属 10元无门槛券
私享最新 技术干货