python中的encode()和decode()函数
對(duì)于很多人來(lái)說(shuō),python的中字符轉(zhuǎn)碼是一件很頭疼的事情,本來(lái)期望結(jié)果輸出的是中文,結(jié)果來(lái)一段像這樣\xe4\xbd\xa0\xe5\xa5\xbd像是亂碼的字符串。
由于學(xué)python沒(méi)多久,昨天使用python的時(shí)候,就遇到這種問(wèn)題,現(xiàn)在來(lái)深入研究下與之相關(guān)的encode()和decode()函數(shù),和如何把如亂碼般的字符串轉(zhuǎn)成中文。
encode()和decode()都是字符串的函數(shù),可直接查看關(guān)于python字符串章節(jié)的官方文檔:
https://docs.python.org/3/library/stdtypes.html?highlight=encode#string-methods
從英文意思上看,encode和decode分別指編碼和解碼。在python中,Unicode類型是作為編碼的基礎(chǔ)類型,即:
decode encode str ---------> str(Unicode) ---------> str- 1
- 2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
簡(jiǎn)要說(shuō)下一般有哪些編碼格式。
ASCII碼
ASCII碼是美國(guó)早期制定的編碼規(guī)范,只能表示128個(gè)字符,包括英文字符、阿拉伯?dāng)?shù)字、西文字符以及32個(gè)控制字符。簡(jiǎn)單來(lái)說(shuō),就是下面這個(gè)表:
擴(kuò)展ASCII碼(Extended ASCII)
簡(jiǎn)單而言,擴(kuò)展ASCII碼的出現(xiàn)是因?yàn)锳SCII不夠用,所以向ASCII表繼續(xù)擴(kuò)充到256個(gè)符號(hào)。
但是因?yàn)閷?duì)于擴(kuò)展ASCII,不同的國(guó)家有不同的標(biāo)準(zhǔn),于是促使了Unicode編碼的誕生。
擴(kuò)展ASCII碼表如下:
Unicode
準(zhǔn)確來(lái)說(shuō),Unicode不是編碼格式,而是字符集。這個(gè)字符集包含了世界上目前所有的符號(hào)。
另外,在原來(lái)有些字符可以用一個(gè)字節(jié)即8位來(lái)表示的,在Unicode將所有字符的長(zhǎng)度全部統(tǒng)一為16位,因此字符是定長(zhǎng)的。
Unicode是長(zhǎng)這樣的:
- 1
上面這段Unicode的意思是“你好中國(guó)!hello,123”。
關(guān)于Unicode,可在這個(gè)網(wǎng)站查到所有字符:
https://unicode-table.com/en/
GB2312
當(dāng)國(guó)人得到計(jì)算機(jī)后,那就要對(duì)漢字進(jìn)行編碼。在ASCII碼表的基礎(chǔ)上,小于127的字符意義與原來(lái)相同;而將兩個(gè)大于127的字節(jié)連在一起,來(lái)表示漢字,前一個(gè)字節(jié)從0xA1(161)到0xF7(247)共87個(gè)字節(jié),稱為高字節(jié),后一個(gè)字節(jié)從0xA1(161)到0xFE(254)共94個(gè)字節(jié),稱為低字節(jié),兩者可組合出約8000種組合,用來(lái)表示6763個(gè)簡(jiǎn)體漢字、數(shù)學(xué)符號(hào)、羅馬字母、日文字等。
在重新編碼的數(shù)字、標(biāo)點(diǎn)、字母是兩字節(jié)長(zhǎng)的編碼,這些稱為“全角”字符;而原來(lái)在ASCII碼表的127以下的稱為“半角”字符。
簡(jiǎn)單而言,GB2312就是在ASCII基礎(chǔ)上的簡(jiǎn)體漢字?jǐn)U展。
gb2312碼表:
http://www.fileformat.info/info/charset/GB2312/list.htm
GBK
簡(jiǎn)單而言,GBK是對(duì)GB2312的進(jìn)一步擴(kuò)展(K是漢語(yǔ)拼音kuo zhan(擴(kuò)展)中“擴(kuò)”字的聲母),
收錄了21886個(gè)漢字和符號(hào),完全兼容GB2312。
GB18030
GB18030收錄了70244個(gè)漢字和字符,更加全面,與 GB 2312-1980 和 GBK 兼容。
GB18030支持少數(shù)民族的漢字,也包含了繁體漢字和日韓漢字。
其編碼是單、雙、四字節(jié)變長(zhǎng)編碼的。
UTF(UCS Transfer Format)
UTF是在互聯(lián)網(wǎng)上使用最廣的一種Unicode的實(shí)現(xiàn)方式。我們最常用的是UTF-8,表示每次8個(gè)位傳輸數(shù)據(jù),除此之外還有UTF-16。
UTF-8長(zhǎng)這樣,“你好中國(guó)!hello,123”:
- 1
簡(jiǎn)單總結(jié)(來(lái)源于網(wǎng)絡(luò))
- 中國(guó)人民通過(guò)對(duì) ASCII 編碼的中文擴(kuò)充改造,產(chǎn)生了 GB2312 編碼,可以表示6000多個(gè)常用漢字。
- 漢字實(shí)在是太多了,包括繁體和各種字符,于是產(chǎn)生了 GBK 編碼,它包括了 GB2312 中的編碼,同時(shí)擴(kuò)充了很多。
- 中國(guó)是個(gè)多民族國(guó)家,各個(gè)民族幾乎都有自己獨(dú)立的語(yǔ)言系統(tǒng),為了表示那些字符,繼續(xù)把 GBK 編碼擴(kuò)充為 GB18030 編碼。
- 每個(gè)國(guó)家都像中國(guó)一樣,把自己的語(yǔ)言編碼,于是出現(xiàn)了各種各樣的編碼,如果你不安裝相應(yīng)的編碼,就無(wú)法解釋相應(yīng)編碼想表達(dá)的內(nèi)容。
- 終于,有個(gè)叫 ISO 的組織看不下去了。他們一起創(chuàng)造了一種編碼 UNICODE ,這種編碼非常大,大到可以容納世界上任何一個(gè)文字和標(biāo)志。所以只要電腦上有 UNICODE 這種編碼系統(tǒng),無(wú)論是全球哪種文字,只需要保存文件的時(shí)候,保存成 UNICODE 編碼就可以被其他電腦正常解釋。
- UNICODE 在網(wǎng)絡(luò)傳輸中,出現(xiàn)了兩個(gè)標(biāo)準(zhǔn) UTF-8 和 UTF-16,分別每次傳輸 8個(gè)位和 16個(gè)位。于是就會(huì)有人產(chǎn)生疑問(wèn),UTF-8 既然能保存那么多文字、符號(hào),為什么國(guó)內(nèi)還有這么多使用 GBK 等編碼的人?因?yàn)?UTF-8 等編碼體積比較大,占電腦空間比較多,如果面向的使用人群絕大部分都是中國(guó)人,用 GBK 等編碼也可以。
總結(jié)
以上是生活随笔為你收集整理的python中的encode()和decode()函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python中使用ElementTree
- 下一篇: Python os模块常用介绍