海上月明

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

          [轉(zhuǎn)]Python的ASCII, GB2312, Unicode , UTF-8

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

          將得到
          u'\u4f60\u597d',

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

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

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

          它是 “你好”的UTF-8編碼結(jié)果。

          python中使用 unicode的關(guān)鍵:unicode是一個(gè)類,函數(shù)unicode(str,"utf8")從utf8編碼(當(dāng)然也可以是別的編碼)的字符串str生成 unicode類的對(duì)象,而函數(shù)unc.encode("utf8")將unicode類的對(duì)象unc轉(zhuǎn)換為(編碼為)utf8編碼(當(dāng)然也可以是別的編碼)的字符串。于是,編寫(xiě)unicode相關(guān)程序,需要做的事情是 * 獲取數(shù)據(jù)(字符串)時(shí),用unicode(str, "utf8")生成unicode對(duì)象 * 在程序中僅使用unicode對(duì)象,對(duì)程序中出現(xiàn)的字符串常量都以u(píng)"字符串"的形式書(shū)寫(xiě) * 輸出時(shí),可將unicode對(duì)象轉(zhuǎn)換為任意編碼輸出,使用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")
                 ???

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

          Powered by ScribeFire.


          評(píng)論

          # re: [轉(zhuǎn)]Python的ASCII, GB2312, Unicode , UTF-8  回復(fù)  更多評(píng)論   

          2011-09-17 15:41 by faicker
          錯(cuò)誤
          主站蜘蛛池模板: 兴安县| 滕州市| 剑阁县| 亚东县| 卓资县| 镇赉县| 岱山县| 丹巴县| 剑河县| 荣成市| 德兴市| 博客| 调兵山市| 尼勒克县| 股票| 淮阳县| 安远县| 淳化县| 铜陵市| 海淀区| 罗平县| 海伦市| 阿坝县| 渭源县| 本溪市| 资溪县| 旺苍县| 甘谷县| 和顺县| 德清县| 武穴市| 广州市| 贞丰县| 德阳市| 古蔺县| 邛崃市| 罗山县| 沛县| 化隆| 岳阳市| 临澧县|