免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1824 | 回复: 0
打印 上一主题 下一主题

python中的i18n心得小节 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-06 11:27 |只看该作者 |倒序浏览
1. 文件开头的 # coding=XXX
是告诉别人/解释器/文本编辑器本文件存储时所用的编码方式
若声明 # coding=utf8 则保存时一定注意存成utf8编码的文本文件
一般用 # coding=gbk 这样不但支持汉字也不需要刻意存储utf8

2. 编码(code)不等于编码点(unicode code point)
例如:汉字 “你”的unicode编码点为:U+4F60,utf8码为:e4 bd a0
print 输出是按照系统使用的编码页进行的,如果是中文windows系统则使用cp936,
所以一个 utf8 编码的汉字在 print前要先decode。
例如:
一个声明为 # coding=utf8 的文件中有汉字 a = '你'
在中文windows控制台下的python环境里
a                          # 输出:'\xe4\xbd\xa0'
print a                    # 输出:浣犲ソ
print a.decode('utf8')     # 输出:你

3. python控制台下的输入为当前系统编码页的对应码或unicode,unicode采用2字节码还是4字节码取决于python编译时的设置,一般为2字节码。
例如:
a = '你'                    # a的编码为'\xc4\xe3'
b = u'你'                   # b的编码为u'\u4f60'
print a, b                  # 输出均正确
b.encode('utf8')            # 得到 '\xe4\xbd\xa0'
a.decode('cp936').encode('utf8') == b.encode('utf8')    # True
值得注意的是:
a.decode('cp936')得到的是unicode。换言之,unicode并不是encode到的,即unicode不是一种编码方案,它是一个编码点表,各种编码方案安装这个表进行自己的映射,映射方法是encode('XXX')。
python内置的unicode方法也是上述映射的逆(另一个逆自然是decode),例如:
a = '你'
b = a.decode('cp936').encode('utf8')
unicode(a, 'cp936') == unicode(b, 'utf8')               # True


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/19962/showart_123926.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP