额用python搞中文的时候还是略头疼了下SO特此总结:

环境XP系统python版本2.7.5开发环境ulipad

(0).要转换编码的时候都需要先解码成unicode然后在编码成对应的编码类型

比如已知字符串s的编码为utf8那么要转换为gb2312的代码为:

s.decode("utf8").encode("gb2312")

decode专门负责把某个字符串的编码格式解码成unicode编码,encode专门把unicode编码转化为对应的编码。

A编码->unicode编码->B编码

(1).创建的txt文本文件的默认编码方式是ANSI编码格式,所以我创建了个文件里面输入了“中国”两个字,然后读取直接print,显示正常。

#!/usr/bin/env python#coding=utf-8import osfile = open("d:\\test.txt")data = file.readline()print data

输出:中国

(2).紧接(1),我把文件编码转化为utf8格式,里面输入“中国”两个字,跟(1)同样的代码,输出结果为:

\xef\xbb\xbf\xe4\xb8\xad\xe5\x9b\xbd

丫的,要你输出中国2个字就那么难么--

这里需要注意的:

经过若干研究,从中得出一卑鄙无耻的问题:

原来,某些软件,如notepad,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF0xBB0xBF,即BOM),而我正是用notepad做测试的。因此我们在读取时需要自己去掉这些字符,python中的codecsmodule定义了这个常量:codecs.BOM_UTF8

#!/usr/bin/env python#coding=utf-8import osimport sysimport codecsfile = open("d:\\test.txt")data = file.readline()if data[:3] == codecs.BOM_UTF8:data = data[3:]print "hello"data = data.decode("utf8").encode("gb2312")print data

输出:中国

现在我终于理解notepad里面有一个“以utf-8无BOM格式编码”的意思了

(3)gb2312编码对一些很生僻的中文字并不支持,比如“囧”“苶”,这个问题也头疼了半天:

可以参考

我在对从腾讯微博开放平台获取到的json进行输出的时候就用方法(2)就输出不了

会出现:

错误原因:'gb2312'codeccan'tencodecharacteru'\xb7'inposition8061:illegalmultibytesequence

解决方法就是把gb2312编码改成gbk编码就顺利输出了

(4)如果要打开一个含有中文的文件方法如下:

file = open((u"d:\\喜羊羊.txt").encode('gbk'),"r")