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