############################################################################## # 在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 |
Python中的Unicode
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.