(注:本文部分內容摘自互聯網,由於作者水平有限,不足之處,還望留言指正。)
記得幾天前,部門的一個小姑娘問我,怎么她Python打印出來的中文信息都亂碼了?我走過去,略思一二,瞬間給她搞定,其實這是字符編碼轉換的問題。這時,我注意到小姑娘流露出一絲絲崇拜的眼神。所以我想,如果你連編碼問題都搞不定,還怎么泡妞啊。可能一部分人也會進入這種誤區,我以我小學生的水平,把我的理解結合網上的資料寫下來。
注意:Python3默認編碼是unicode;而Python2是ASCII碼。Windows環境默認是gbk編碼。
常見編碼錯誤原因:
1. Python解釋器的默認編碼
2. Python源文件文件編碼
4. 操作系統的語言設置
一、 編碼的種類
I、ASCII 占1個字節,只支持英文
II、GB2312 占2個字節,支持6700+漢字
III、GBK GB2312的升級版,支持21000+漢字,中文2個字節。
IV、Unicode 2-4字節 已經收錄136690個字符
V、UTF-8: 使用1、2、3、4個字節表示所有字符;優先使用1個字符、無法滿足則使增加一個字節,最多4個字節。英文占1個字
節、歐洲語系占2個、東亞占3個,其它及特殊字符占4個。中文3個字節。
VI、UTF-16: 使用2、4個字節表示所有字符;優先使用2個字節,否則使用4個字節表示。
二、 Python3的執行過程
1.解釋器找到代碼文件,把代碼字符串按文件頭定義的編碼加載到內存,轉成unicode
2.把代碼字符串按照語法規則進行解釋,
3.所有的變量字符都會以unicode編碼聲明
Py3 自動把文件編碼轉為unicode,Python2並不會自動的把文件編碼轉為unicode存在內存里。需要手動轉碼。
三、手動轉碼規則
UTF-8 --> decode 解碼 --> Unicode
Unicode --> encode 編碼 --> GBK / UTF-8 等
使用type可以查看編碼形式,unicode是‘unicode’,gbk和utf-8是‘str或bytes’。
實例:
Python2中默認是ASCII碼
#coding=utf-8 #Python2中默認是ASCII碼,一般會加入以utf-8編程 a = '編碼' # a是utf-8類型 b = a.decode('utf-8') # b是Unicode類型 c = b.encode('gbk') #c是gbk類型 d = c.decode('gbk').encode('utf-8') #先將c轉換成Unicode,再轉成utf-8 print a ,b,c,d print type(a),type(b),type(c),type(d)
Python3中默認是unicode
a = '編碼' # a是unicode類型 b = a.encode('utf-8') # b是utf-8類型 c = a.encode('gbk') #c是gbk類型 print (a ,b,c) print (type(a),type(b),type(c)) #python3默認是unicode類型
在Windows中默認gbk
>>> a = '編碼' >>> b = a.decode('gbk') #windows默認是gbk,先解碼成unicode >>> c = b.encode('utf-8') #unicode轉換成utf-8 >>> a '\xb1\xe0\xc2\xeb' >>> b u'\u7f16\u7801' >>> c '\xe7\xbc\x96\xe7\xa0\x81' >>> print(a,b,c) ('\xb1\xe0\xc2\xeb', u'\u7f16\u7801', '\xe7\xbc\x96\xe7\xa0\x81') >>> type(a) <type 'str'> >>> type(b) <type 'unicode'> >>> type(c) <type 'str'> >>>
就寫這些吧。
哎,我們曾經有夢,可是那一年畢業了,夢去另一個城市搬磚了。夢是我同學呀。