python中的unicode编码的若干问题
时间:2009-03-18 来源:thomation
汉字就是麻烦,中国的标准是gbk,而国际标准是unicode,需要转来转去的,python中使用unicode和decode,encode转
unicode:把某个编码的字符串转成unicode,例如unicode(s,'gb2312')把gb2312编码的s转成unicode编码
decode:把某个编码的字符串转成unicode,例如s.decode('gb2312'),把s从gb2312转成unicode
encode:把unicode编码转成其他编码,例如s.encode('gb2312'),把s从unicode转成gb2312
但是究竟系统是什么编码呢,需要使用locale.getdefaultlocale()[1]来取这个编码,例如我的系统是cp936.
好了,开始实际点的东西,编码这方面还是一头雾水,按照以上做还是做不出来,真是见鬼了。
如果一个文件是按照unicode编码存的,需要下面这样做才成正常输出
while True:
s = f.readline()
if len(s) == 0:
break
print unicode(s,'utf-8').encode(locale.getdefaultlocale()[1])
最后一句话看起来罗嗦,把s从转成utf-8后再转成默认编码。等以后仔细研究一下再说吧,搞得头疼,现在终于能正常显示千千的xml了
现在想想可能是这样,文件是按照unicode编码,但是系统认为是gbk编码,所以直接读入输出是乱码。unicode是把s从utf-8转成unicode,然后再用encode转成gbk,输出就ok了,果然,可以去掉后便的encode,系统自动转gbk
现在终于想明白答案了,unicode和gbk是编码的值,而utf-8和utf-16是编码的表现形式,python处理的是unicode,所以不要把uft-8个unicode混淆,如果GBK要转UTF-8必须先转uncode码,再转utf-8就OK了。
所以,甚至可以把utf-8,unicode,gbk理解成不同的编码,中间通过unicode转换,呵呵。
unicode:把某个编码的字符串转成unicode,例如unicode(s,'gb2312')把gb2312编码的s转成unicode编码
decode:把某个编码的字符串转成unicode,例如s.decode('gb2312'),把s从gb2312转成unicode
encode:把unicode编码转成其他编码,例如s.encode('gb2312'),把s从unicode转成gb2312
但是究竟系统是什么编码呢,需要使用locale.getdefaultlocale()[1]来取这个编码,例如我的系统是cp936.
好了,开始实际点的东西,编码这方面还是一头雾水,按照以上做还是做不出来,真是见鬼了。
如果一个文件是按照unicode编码存的,需要下面这样做才成正常输出
while True:
s = f.readline()
if len(s) == 0:
break
print unicode(s,'utf-8').encode(locale.getdefaultlocale()[1])
最后一句话看起来罗嗦,把s从转成utf-8后再转成默认编码。等以后仔细研究一下再说吧,搞得头疼,现在终于能正常显示千千的xml了
现在想想可能是这样,文件是按照unicode编码,但是系统认为是gbk编码,所以直接读入输出是乱码。unicode是把s从utf-8转成unicode,然后再用encode转成gbk,输出就ok了,果然,可以去掉后便的encode,系统自动转gbk
现在终于想明白答案了,unicode和gbk是编码的值,而utf-8和utf-16是编码的表现形式,python处理的是unicode,所以不要把uft-8个unicode混淆,如果GBK要转UTF-8必须先转uncode码,再转utf-8就OK了。
所以,甚至可以把utf-8,unicode,gbk理解成不同的编码,中间通过unicode转换,呵呵。
相关阅读 更多 +