(注:本文部份內容摘自互聯網,因爲做者水平有限,不足之處,還望留言指正。)python
記得幾天前,部門的一個小姑娘問我,怎麼她Python打印出來的中文信息都亂碼了?我走過去,略思一二,瞬間給她搞定,其實這是字符編碼轉換的問題。這時,我注意到小姑娘流露出一絲絲崇拜的眼神。因此我想,若是你連編碼問題都搞不定,還怎麼泡妞啊。可能一部分人也會進入這種誤區,我以我小學生的水平,把個人理解結合網上的資料寫下來。編程
注意:Python3默認編碼是unicode;而Python2是ASCII碼。Windows環境默認是gbk編碼。windows
常見編碼錯誤緣由:編碼
1. Python解釋器的默認編碼spa
2. Python源文件文件編碼操作系統
4. 操做系統的語言設置blog
1、 編碼的種類內存
I、ASCII 佔1個字節,只支持英文utf-8
II、GB2312 佔2個字節,支持6700+漢字
III、GBK GB2312的升級版,支持21000+漢字,中文2個字節。
IV、Unicode 2-4字節 已經收錄136690個字符
V、UTF-8: 使用一、二、三、4個字節表示全部字符;優先使用1個字符、沒法知足則使增長一個字節,最多4個字節。英文佔1個字
節、歐洲語系佔2個、東亞佔3個,其它及特殊字符佔4個。中文3個字節。
VI、UTF-16: 使用二、4個字節表示全部字符;優先使用2個字節,不然使用4個字節表示。
2、 Python3的執行過程
1.解釋器找到代碼文件,把代碼字符串按文件頭定義的編碼加載到內存,轉成unicode
2.把代碼字符串按照語法規則進行解釋,
3.全部的變量字符都會以unicode編碼聲明
Py3 自動把文件編碼轉爲unicode,Python2並不會自動的把文件編碼轉爲unicode存在內存裏。須要手動轉碼。
3、手動轉碼規則
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'> >>>
就寫這些吧。
哎,咱們曾經有夢,但是那一年畢業了,夢去另外一個城市搬磚了。夢是我同窗呀。