海上月明

          editer by sun
          posts - 162, comments - 51, trackbacks - 0, articles - 8
             :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

          [轉]Python的ASCII, GB2312, Unicode , UTF-8

          Posted on 2008-01-20 14:54 pts 閱讀(25732) 評論(1)  編輯  收藏 所屬分類: Python
          李李 - 網易博客
          Python的ASCII, GB2312, Unicode , UTF-8
          ASCII 是一種字符集,包括大小寫的英文字母、數字、控制字符等,它用一個字節表示,范圍是 0-127 Unicode分為UTF-8和UTF-16。
          UTF-8變長度的,最多 6 個字節,小于 127 的字符用一個字節表示,與 ASCII 字符集的結果一樣,ASCII 編碼下的英語文本不需要修改就可以當作 UTF-8 編碼進行處理。
          Python 從 2.2 開始支持 Unicode ,函數 decode( char_set )可以實現 其它編碼到 Unicode 的轉換,函數 encode( char_set )實現 Unicode 到其它編碼方式的轉換。
          比如
          ("你好").decode( "GB2312")

          將得到
          u'\u4f60\u597d',

          即 "你"和“好"的 Unicode 碼分別是 0x4f60 和 0x597d

          再用
          (u'\u4f60\u597d').encode("UTF-8")

          將得到
          '\xe4\xbd\xa0\xe5\xa5\xbd'

          它是 “你好”的UTF-8編碼結果。

          python中使用 unicode的關鍵:unicode是一個類,函數unicode(str,"utf8")從utf8編碼(當然也可以是別的編碼)的字符串str生成 unicode類的對象,而函數unc.encode("utf8")將unicode類的對象unc轉換為(編碼為)utf8編碼(當然也可以是別的編碼)的字符串。于是,編寫unicode相關程序,需要做的事情是 * 獲取數據(字符串)時,用unicode(str, "utf8")生成unicode對象 * 在程序中僅使用unicode對象,對程序中出現的字符串常量都以u"字符串"的形式書寫 * 輸出時,可將unicode對象轉換為任意編碼輸出,使用str.encode("some_encoding")

          >>> unicode("你好", "utf8")
                 u'\u4f60\u597d'

          >>> x = _

          >>> type(x)

          >>> type("你好")

          >>> x.encode("utf8")
                 '\xe4\xbd\xa0\xe5\xa5\xbd'

          >>> x.encode("gbk")
                 '\xc4\xe3\xba\xc3'

          >>> x.encode("gb2312")
                 '\xc4\xe3\xba\xc3'

          >>> print x
                 你好

          >>> print x.encode("utf8")
                 你好

          >>> print x.encode("gbk")
                 ???

          以上是測試結果(Ubuntu 6.06,locale為utf8),注意type(x)和type("你好")的區別。從編碼上可以看出utf8編碼與gbk不同。在utf8的 locale設置下,打印x按該環境變量編碼(我猜我猜我猜猜猜),而打印x.encode("gbk")則是亂碼。

          Powered by ScribeFire.


          評論

          # re: [轉]Python的ASCII, GB2312, Unicode , UTF-8  回復  更多評論   

          2011-09-17 15:41 by faicker
          錯誤
          主站蜘蛛池模板: 双柏县| 梓潼县| 东宁县| 米林县| 荃湾区| 林州市| 山阴县| 博爱县| 尉氏县| 澄迈县| 康定县| 瓮安县| 天门市| 宣威市| 大理市| 新丰县| 资阳市| 分宜县| 微山县| 澳门| 沂源县| 大竹县| 舞阳县| 靖宇县| 库车县| 沅江市| 六安市| 马龙县| 忻州市| 高陵县| 四平市| 遂川县| 英吉沙县| 广州市| 县级市| 电白县| 新宁县| 合江县| 郁南县| 广安市| 旺苍县|