Python中的Unicode


##############################################################################
# 在Python中使用Unicode
# 20061013 by [email protected]
#
# 在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
發佈了46 篇原創文章 · 獲贊 0 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章