日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中的encode()和decode()函数

發布時間:2025/3/20 python 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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
>>> u = '中文' # 指定字符串類型對象u >>> str1 = u.encode('gb2312') # 以gb2312編碼對u進行編碼,獲得bytes類型對象 >>> print(str1) b'\xd6\xd0\xce\xc4'>>> str2 = u.encode('gbk') # 以gbk編碼對u進行編碼,獲得bytes類型對象 >>> print(str2) b'\xd6\xd0\xce\xc4' >>> str3 = u.encode('utf-8') # 以utf-8編碼對u進行編碼,獲得bytes類型對象 >>> print(str3) b'\xe4\xb8\xad\xe6\x96\x87'>>> u1 = str1.decode('gb2312') # 以gb2312編碼對字符串str進行解碼,獲得字符串類型對象 >>> print('u1') '中文'>>> u2 = str1.decode('utf-8') # 報錯,因為str1是gb2312編碼的 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte
  • 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是長這樣的:

\u4f60\u597d\u4e2d\u56fd\uff01\u0068\u0065\u006c\u006c\u006f\uff0c\u0031\u0032\u0033
  • 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”:

你好中国!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()函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。