Python中的Unicode


##############################################################################
# 在Python中使用Unicode
# 20061013 by daineng@nj.cpsecure
#
# 在Python-Shell下使用 (Linux & Windows)
#
##############################################################################

# 这里所说到的Unicode采用2个字节方案

     '汉'的Unicode编码是 6C49

##############################################################################
## From Unicode to Local

# 直接输入Unicode的编码号得到Unicode字符串

     >>> s = u'/u6c49'
     >>> s
     u'/u6c49'

     >>> print s
     汉 # 在Windows下由于默认的code-page是'bg2312'或'gbk'所以可以直接显示

     # 如果默认的code-page不是这个,如Linux下,就会有异常抛出
     Traceback (most recent call last):
     File "<stdin>", line 1, in ?
     File "/usr/local/lib/python2.4/encodings/iso8859_15.py", line 18, in encode
          return codecs.charmap_encode(input,errors,encoding_map)
     UnicodeEncodeError: 'charmap' codec can't encode character u'/u6c49' in position 0: character maps to <undefined>
     # 必须指定编码
     >>> print s.encode('gbk')

     # 查看编码
     >>> s.encode('gbk')
     '/xba/xba' # 这个是'汉'在GBK中的编码,GB2312也是这样
                    # 平时在文件中看到的汉字就是这个编码

##############################################################################
## From Local to Unicode

# 输入其它编码的字符

     >>> s = '/xba/xba'
     # 或
     >>> s = '汉'

     >>> s
     '/xba/xba'
     >>> print s
     汉

     >>> s.decode('gbk')
     u'/u6c49'

##############################################################################
## From Local to Other

     # 如果我们有一个UTF8编码的汉字字符(gbk编码)
     >>> u = '/xe6/xb1/x89' # '汉'的 UTF8 编码
     >>> print u.decode('utf8').encode('gbk')

# UTF-8 和 GBK 或其它本地编码的关系

     虽然它们都是编码方式,但GBK的编码将和系统使用的字符的编码结果一致,也就是
     说,编码结果是可以直接正常显示出来的。而 UTF-8 的编码仅仅作为Unicode的实
     现(为了节省字节空间,一般不直接保存Unicode,而是编码后再保存,UTF-8就是
     Unicode编码保存的实现方式之一),它的结果一般不能直接显示。

     从实现上来看Unicode的顺序可能与与本地编码的顺序完全没有关系,所以与本地编
     码的转换很可能需要一个巨大的map型数据,而 UTF-8 编码完全可以只用几行代码
     实现。

##############################################################################
## Summary

          decode(local)
(local) -----------------> (unicode)

               encode(local)
(unicode) -----------------> (local)

# 如果local编码和本地字符集的编码对应,那么就能够正常显示

##############################################################################
## Others

ascii -> gb2312 -> gbk -> gb18030

windows的内码仍然是 GBK
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值