[轉(zhuǎn)]Python的ASCII, GB2312, Unicode , UTF-8 - 海上...
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è)類(lèi),函數(shù)unicode(str,"utf8")從utf8編碼(當(dāng)然也可以是別的編碼)的字符串str生成 unicode類(lèi)的對(duì)象,而函數(shù)unc.encode("utf8")將unicode類(lèi)的對(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")則是亂碼。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。