Python2和3字符編碼的區別

python解釋器運行代碼的流程

  1. 啓動python解釋器(至關於文本編輯器)
  2. 打開文件,顯示這個字符並檢查語法(涉及字符編碼, a=1只是一個很普通的字符)
  3. 解釋字符 (涉及字符編碼,再去內存空間 生成一個a=1的變量)

python2用的是ascii, python3默認是utf8讀取字符python

# coding:gbk會告訴python3解釋器用gbk編碼讀取字符編輯器

python3(瞭解)

你看到的實際上是unicode編碼

可是終端幫你把這個unicode的0和1作一個轉換,從unicode轉換成了終端可以識別的編碼格式,而後變成中文code

# coding:gbk
a = '中文'  # 用unicode編碼存儲了這堆0和1
print(a)  # 010101010

假設終端的默認編碼是gbk , 認識 unicode編碼的變量blog

假設終端的默認編碼是utf8,認識 unicode編碼的變量內存

Python2(瞭解)

unicode + 指定的coding編碼(str類型)ci

# coding:gbk
a = '中文'  # 用gbk編碼存儲了這堆0和1
a = u'中文'  # 用unicode編碼存儲了這堆0和1
print(a)

終端是一個文本編輯器,會有默認編碼.unicode

假設終端的默認編碼是gbk , 認識 gbk編碼的變量字符編碼

假設終端的默認編碼是utf8, 不認識 gbk編碼的變量
table

總結

代碼詳情 Python2執行狀況 Python3執行狀況
# coding:gbk
print('中')
終端:utf8
亂碼 不亂碼
# coding:utf8
print('中')
終端:utf8
不亂碼 不亂碼
# coding:gbk
print(u'中')
終端:utf8
不亂碼 不亂碼
# coding:utf8
print(u'中')
終端:utf8
不亂碼 不亂碼

在Python2中若是指定了字符編碼,那麼內存存取就會按照指定的字符編碼去入內存。解釋或去執行時就要按照指定了的字符編碼去解釋,不然就會亂碼。 不然能夠在定義變量前面加上u,這樣變量就會以unicode編碼存入內存。

如:

#coding:gbk

name = "爸爸"

但在Python3中就不會有這樣的問題,由於不管你指定了什麼字符編碼,在內存存取時都會使用Unicode編碼去入內存,Unicode編碼能夠和任意的字符編碼相互轉換,並在讀取時按照所需的編碼區讀取,這樣就很好解決了字符編碼的問題

相關文章
相關標籤/搜索