關於Python 中 encode 和 decode 的區別
在初學python的過程中,涉及python的編碼方式,談一談自己的理解。
首先就是計算機存儲數據的基本知識,現代計算機極其複雜,但是從簡單的方面來看,其就是一個巨大的開關陣列,使用“1”和“0”表示開和關,今天我們用“字節”(byte)表示一個8位(0和1)序列,有了字節以後,可以通過類似於編碼的方式將我們所需要的文本信息轉化爲開關信息來進行存儲,當我們需要顯示該信息的時候使用解碼的方式將其顯示出來。
最爲常見的標準就是美國信息交換標準代碼(ASCⅡ),這個標準將數字和字母互相對應,比如90表示Z,如果用位數表示就是1011010,計算機中的ASCⅡ表會做出相應的轉換工作。但是ASCⅡ有一個問題,就是它只能對英語和若干類似的語言進行編碼,世界上的語言何止千萬種,使用的字符數量也遠遠超過256個,這是一個急需要解決的問題。
爲了解決這個問題,Unicode就被髮明瞭出來,這是一種人類語言的“通用編碼”,即爲(universal encoding),它可以存儲個字符,這足以裝的下所有的語言。所以存儲字符的問題就解決了,但是我們的文本用不了那麼多的字符,大部分常用字符依然使用8位編碼,這一約定在Python裏面叫UTF-8(Unicode Transformation Format 8 Bits),這是當前的標準。
但在實際學習的過程中,我參考了這篇高瀏覽量的文章: https://blog.csdn.net/qq_40134903/article/details/80710882
,發現和所寫的程序有着不一樣的結果,或者說原博表述的有些問題。
所謂encode,是編碼的意思,很明顯是字符串→字節串的表達,也就是說成功的使用這個函數的到的結果應當時一個人類看不懂的字節串,至於這個字節串是什麼類型的,取決於函數括號內的內容,即:
bytes = str.encode('UTF-8') #UTF-8可以替換爲如gb2312之類的其他編碼方式
而decode則恰恰相反,它是一種從字節串到字符串的轉換,這裏可以將字節串比作一把鎖,而decode就是一個開鎖匠,他將會使用各種編碼方式來進行開鎖,如果字節串是通過UTF8編碼的,那麼只有對應的UTF-8這把鑰匙能開,否則會報錯。
str = bytes.decode('UTF-8') #這裏的str來自於上面的bytes,它們的編碼解碼方式相同,所以程序可以正常的運行
考慮這種情況:
str = bytes.decode('gb2312') #程序報錯
所以這裏就很明顯了,每次要將字節串轉化爲字符串,就是“解碼字符串”,將字符串轉化爲字節串,就是“編碼字符串”,可以試試下面的程序:
str = "中國"
bytes = str.encode('UTF-8')
str_changed = bytes.decode('UTF-8')
#str_changed = bytes.decode('gb2312') 此句報錯 SyntaxError: invalid syntax
print(str_changed)
如有疑問,請郵件聯繫: [email protected]