一、Python2中的字符存在的解碼編碼問題
如果是現在正在用Python2的人應該都知道存在字符編碼問題,就舉一個最簡單的例子吧:Python2是無法在命令行直接打印中文的,當然他也是不會報錯的,頂多是一堆你看不懂的亂碼。如果想在直接顯示中文,我們是可以在Python2文件頭部申明字符編碼的格式。如下圖

這里 #-*-coding:utf-8 -*- 是用來申明下面的代碼是用什么編碼來解釋;
1.1.Python2中的解碼和編碼:
在編碼和解碼的世界中,我們得需要找一個大家都知道的文字。也可以這么理解。我是一個中國人現在和一個日本人溝通,我肯定是無法理解他說的是什么,他同樣也無法理解,但是這樣就沒有辦法了嗎?或許我們需要一個國際的語言——英語。這樣來自不同國家的人也可以進行溝通了(雖然我知道 are you ok 0-0)。在編碼中也是一樣,gbk和utf-8都不知道對方的格式是什么吊意思。所以如果要上gbk讀懂utf-8的編碼就得將utf-8 decode成 Unicode,而Unicode有知道gkb,這里需要將Unicode在encode成gbk就行了

#-*- coding:utf-8 -*-msg = "中國"print msg#解碼在編碼的過程,encoding是申明用申明這段代碼是什么編碼gbk_str = msg.decode(encoding='utf-8').encode(encoding='gbk')print gbk_str#其實兩種輸出的結果是一樣的
在Python2中默認是使用gbk來解釋IDE中的代碼的,所以無法直接在Python命令行中直接輸入中文,所以我們才會使用 #-*-coding:utf-8 -*-來申明頭部,我們到底需要使用什么語言來解釋下面代碼。細心的人肯定是發現了一個問題,申明頭部只是使用utf-8來解釋下面的話,按理說命令行中雖然不報錯,但是應該也是亂碼才是,這里為啥會直接輸出中文呢畢竟DOS命令行中默認支持的是gbk格式的字符代碼呀?這里就涉及到另外的一個概念了。Python到內存解釋器里面,默認是用的Unicode,文件加載到內存后自動解碼成Unicode,而Unicode是外國碼,自然也就可以翻譯來自utf-8的編碼,也可以翻譯成gbk的編碼了。顧可以顯示中文了。
PS:這里我們得出一個結論:python2 中解碼動作是必須的,但是編碼可以不用,因為內存就是Unicode
1.2、Python3中字符編碼的問題:
額,這還有什么可以說的呢?Python3默認就是使用utf-8解釋代碼的。也就是行首自帶 #-*-coding:utf-8 -*-(GBM),所以也就不存在解碼的問題。但是我在這里提上一嘴(其實就是怕自己以后也忘了,嘿嘿),如果我們將utf-8的字符編碼的格式給編碼成gbk。這里會輸出bytes格式的東西。
新聞熱點
疑難解答