python 字符编码问题

缘由

近期,用Python处理一些中文的字符串,可是用Python读取文件的中文字符和在代码中输入的中文字符,在判断处理时,例如判断“相等”或者“包含”,老是不能判断,相等或者包含都不起做用。看了字符的编码,源文件输入的中文字符,是2个字节表示,读入的文件,是3个字节表示。在网上找了不少资料,大多和个人问题不想关,这里就根据本身的领悟和网上不错的资源跟你们分享一下。python

问题分析

不要把Python和Java混淆,Python是脚本语言,不会编译生成可执行文件,而Java会编译代码,造成可执行的class文件,在编码上,Java会在造成class的时候,采用Unicode直接编码相似中文的字符串,而Python,你即便在文件的第一行声明了编码,有时我也感受不起做用,只是不会在保存时,重复提醒你在代码中使用的特殊字符。编辑器

网上有不少decode,encode,看的我一阵头大,之前不知为什么物,这里解释一下:字符串在Python内部的表示,都是以Unicode形式,因此在作编码转换时,都是以Unicode做为中间形式;而将其余编码转化为Unicode的过程,成为decode,将Unicode转化成其余编码的过程,成为encode。在源代码中,你输入的,是你编辑器默认的编码,多是utf-8,,也多是gbk或者其余编码,因此写代码,你要明白 你的编辑器环境的编码方式。在这里我就是我刚装不久Python,用的是默认的IDE,里面没有设置编码,致使源码中采用了Windows默认的编码“gbk”(2个字节),而我读入的文件则是utf-8表示(三个字节)。而在Python中,它不会自动将这些字符串转成Unicode形式,采用的是什么编码,就是什么编码。因此在比较或者包含时,编辑器里的中文是两个字节,读入的文件,是三个字节,编码格式就不同,更不要谈比较或者包含了。学习

解决方法

知道了问题出在哪,那就好解决了。编码

方法一: 我直接将编辑器环境在设置里面,设置成utf-8,解决问题了。spa

方法二:对于编辑器里写的中文编码和读取的文件的编码,都decode成Unicode形式。.net

方法三:经过Unicode形式,转化成一种编码格式,utf-8或者gbk(我的建议utf-8,代码中属于比较默认一类的).code

s1 = unicode('你好','gbk')  #这里是window是环境,输入的要经过gbk进行Unicode
s2 = unicode(input, 'utf-8') #读入的文件为utf-8,要使用utf-8

#或者用方法二中直接采用 decode,你们能够本身找找,自主学习和实践,是每一个IT人必须的

附加

注意一下:window中文默认的是gbk,而Linux默认的通常都是utf-8,这个在编码或者处理字符处理,或者文本处理时,要注意,出了问题可能不是代码的问题。blog

若是想着更多了解Unicode,utf-8或者其余编码,推荐看看一个博主的博客,《字符编码的发展历程》,博文地址:http://blog.csdn.net/sfdev/article/details/3770706。图片

我通常写博客都是本身用来记住犯过的错,写的很少,也不会写太多,见谅。文字太多,图片较少,这是大部分IT人最不肯看到的,可是要作个“耐心”的IT人,以此警醒。utf-8

相关文章
相关标签/搜索