Python2與Python3的字元編碼與解碼

2021-08-29 03:58:51 字數 1759 閱讀 5951

編碼(encode):在unicode中,每乙個字元都有乙個唯一的數字表示,那麼將unicode字串轉換為特定字元編碼(ascii、utf-8、gbk)對應的位元組串的過程和規則就是編碼。

解碼(decode):將特定字元編碼(ascii、utf-8、gbk)的位元組串轉換為對應的unicode字串的過程和規則就是解碼。

簡單理解:編碼是給計算機底層用的,解碼是顯示給人看的。

我們都知道,磁碟上的檔案都是以二進位制格式存放的,其中文字檔案都是以某種特定編碼的位元組形式存放的。對於程式源**檔案的字元編碼是由編輯器指定的,比如我們使用pycharm來編寫python程式時會指定工程編碼和檔案編碼為utf-8,那麼python**被儲存到磁碟時就會被轉換為utf-8編碼對應的位元組(encode過程)後寫入磁碟。

當執行python**檔案中的**時,python直譯器在讀取python**檔案中的位元組串之後,需要將其轉換為unicode字串(decode過程)之後才執行後續操作。

如果我們沒有在**檔案指定字元編碼,python直譯器會使用哪種字元編碼把從**檔案中讀取到的位元組轉換為unicode字串呢?就像我們配置某些軟體時,有很多預設選項一樣,需要在python直譯器內部設定預設的字元編碼來解決這個問題,這就是「預設編碼」。

python2和python3的直譯器使用的預設編碼是不一樣的,我們可以通過sys.getdefaultencoding()來獲取預設編碼:

對於python2來講,python直譯器在讀取到中文字元的位元組碼時,會先檢視當前**檔案頭部是否指明字元編碼是什麼。如果沒有指定,則使用預設字元編碼"ascii"進行解碼,導致中文字元解碼失敗,出現如下錯誤:

syntaxerror:non-ascii character '\xc4' in file ***.py on line 11, but no encoding declared;

see for details

對於python3來講,執行過程是一樣的,只是python3的直譯器以"utf-8"作為預設編碼,但是這並不表示可以完全相容中文問題。比如我們在windows上進行開發時,python工程及**檔案都使用的是預設的gbk編碼,也就是說python**檔案是被轉換成gbk格式的位元組碼儲存到磁碟中的。python3的直譯器執行該**檔案時,試圖用utf-8進行解碼操作時,同樣會解碼失敗,出現如下錯誤:

syntaxerror:non-utf-8 code starting with '\xc4' in file xx.py on line 11, but no encodingdeclared; 

see for details

Python 2 與Python 3的區別

1.除號 與整除號 python 2中,是整除 python 3中,是常規除法,是整除 2.raw input與input python 2用raw input python 3用input 都表示輸入函式。3.print與print 以及逗號 python 2中,print my print na...

Python3 與 Python2 的不同

至於學習 python3 和 python2,我了解到的觀點是這樣的。1 現在很多的專案都還是在用 python2,學習 python2 還是有意義的 2 python2 在 python 的官方已經公布了在什麼什麼時間停止維護,所以對於新手來說,學習 python2 的價值不是很大,所以直接 py...

Python2 與Python3 的區別

1.print函式 py2中print是乙個語法結構,如 print value py3中print是乙個函式,如 print value 2.除法運算 py2中兩個整數除法得到的是0,要想得到浮點數結果,則被除數或除數二者要有乙個是浮點數才行。如 print 1 4 0 print 1 4.0.2...