1. 程式人生 > >python 編碼,decode() ,encode() 用法區別

python 編碼,decode() ,encode() 用法區別

python 編碼

ASCII碼 表示127個英文字元

每個中文需要使用兩個位元組來編碼,中文編碼的規則 —— GB2312
由於不同國家有不同的編碼規則,如日本,韓國都使用各自國家的編碼規則,在多語言混用的場合會出現混亂。

Unicode 用來把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了。

Unicode 通常用兩個位元組編碼(有的也用四個位元組),而ASCII碼通常用一個位元組位元組

ASCII碼轉換成Unicode在前面一個位元組補0

UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成1個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組。如果你要傳輸的文字包含大量英文字元,用UTF-8編碼就能節省空間

UTF-8的一個好處在於,原有的ASCII的編碼可以在UTF-8下繼續工作。

搞清楚了ASCII、Unicode和UTF-8的關係,我們就可以總結一下現在計算機系統通用的字元編碼工作方式:

在計算機記憶體中,統一使用Unicode編碼,當需要儲存到硬碟或者需要傳輸的時候,就轉換為UTF-8編碼。

用記事本編輯的時候,從檔案讀取的UTF-8字元被轉換為Unicode字元到記憶體裡,編輯完成後,儲存的時候再把Unicode轉換為UTF-8儲存到檔案:

rw-file-utf-8

瀏覽網頁的時候,伺服器會把動態生成的Unicode內容轉換為UTF-8再傳輸到瀏覽器:

web-utf-8

所以你看到很多網頁的原始碼上會有類似的資訊,表示該網頁正是用的UTF-8編碼。

首先要搞清楚,字串在Python內部的表示是unicode編碼,因此,在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。

decode的作用是將其他編碼的字串轉換成unicode編碼,如str1.decode(‘gb2312’),表示將gb2312編碼的字串轉換成unicode編碼。

encode的作用是將unicode編碼轉換成其他編碼的字串,如str2.encode(‘gb2312’),表示將unicode編碼的字串轉換成gb2312編碼。