python2用的是ascii, python3默認是utf8讀取字符python
# coding:gbk
會告訴python3解釋器用gbk編碼讀取字符編輯器
你看到的實際上是unicode編碼
可是終端幫你把這個unicode的0和1作一個轉換,從unicode轉換成了終端可以識別的編碼格式,而後變成中文code
# coding:gbk a = '中文' # 用unicode編碼存儲了這堆0和1 print(a) # 010101010
假設終端的默認編碼是gbk , 認識 unicode編碼的變量blog
假設終端的默認編碼是utf8,認識 unicode編碼的變量內存
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編碼能夠和任意的字符編碼相互轉換,並在讀取時按照所需的編碼區讀取,這樣就很好解決了字符編碼的問題