關於Python字符編碼encode和decode

(注:本文部份內容摘自互聯網,因爲做者水平有限,不足之處,還望留言指正。)python

      記得幾天前,部門的一個小姑娘問我,怎麼她Python打印出來的中文信息都亂碼了?我走過去,略思一二,瞬間給她搞定,其實這是字符編碼轉換的問題。這時,我注意到小姑娘流露出一絲絲崇拜的眼神。因此我想,若是你連編碼問題都搞不定,還怎麼泡妞啊。可能一部分人也會進入這種誤區,我以我小學生的水平,把個人理解結合網上的資料寫下來。編程

     注意:Python3默認編碼是unicode;而Python2是ASCII碼。Windows環境默認是gbk編碼windows

     常見編碼錯誤緣由:編碼

          1. Python解釋器的默認編碼spa

          2. Python源文件文件編碼操作系統

          3. Terminal使用的編碼code

          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)

輸出結果image

          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類型

輸出結果image

        在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'>
>>>

        就寫這些吧。

       哎,咱們曾經有夢,但是那一年畢業了,夢去另外一個城市搬磚了Be right back。夢是我同窗呀。Be right back

相關文章
相關標籤/搜索