Chinaunix首页 | 论坛 | 博客
  • 博客访问: 536895
  • 博文数量: 146
  • 博客积分: 5030
  • 博客等级: 大校
  • 技术积分: 1820
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-16 20:57
文章分类

全部博文(146)

文章存档

2011年(1)

2010年(4)

2009年(30)

2008年(111)

我的朋友

分类: Python/Ruby

2009-03-18 23:21:57

汉字就是麻烦,中国的标准是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转换,呵呵。
阅读(5300) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~