Python2編碼的理解整理

一直以來對Python2的編碼都是不怎麼理解,遇到問題就是encode、decode換着來,也沒有想要過去徹底瞭解它,這幾天也看了幾篇文章,所以就將自己的理解記錄下來,順便也整理一下自己的理解。
這篇文章主要講了一下幾個問題:

  1. 字符集與字符編碼;
  2. 字符集(字符編碼)在存儲以及傳輸的實現方式;
  3. Str與Unicode;
  4. encode與decode;

一、字符集與字符編碼

字符集基本就算是我們使用的所有文字的集合外加一些常用的符號等,例如,針對ascii字符集,那麼它就是英文字符a-z,A-Z,0-9外加一些常用符號的集合;
字符編碼字符編碼就是將字符集中的每一個字符用數字對應起來,比如,英文字母,’a’用97代替,’A’用65代替;

那麼,爲什麼需要?字符集與字符編碼呢?

因爲任何數據在計算機存儲都是以二進制的方式存儲的,若是我們不將每個字符一一對應一個編碼,那麼,我們又這麼存儲數據與展示數據呢!

二、字符集(字符編碼)在存儲以及傳輸的實現方式

(這裏爲了節(bi)約(mian)篇(bao)幅(lu)只簡單說一下Unicode字符集)unicode字符集是爲了解決各種各樣的語言導致的各種各樣的字符集不兼容的問題二出現的,它的目的是給世界上所有的語言文字一個唯一的編碼,這樣就解決了各個字符集不兼容的問題,但是,Unicode只是一種字符編碼,並沒有規定它存儲、傳輸時候的方式,這時候UTF-8就出場了。
簡單地說,UTF-8就是一種實現Unicode編碼的方式,當然,還有其它的實現方式,這裏不再贅述,它規定了不同的字符應該用幾個字節、什麼樣的表示方式描述它的編碼,總的來說就兩條規則:

  1. 對於單字節的符號,字節的第一位設爲0,後面7位爲這個符號的unicode碼。
  2. 對於n字節的符號,第一個字節的前n位都設爲1,第n+1位設爲0,後面字節的前兩位一律設爲10。剩下的沒有提及的二進制位,全部爲這個符號的unicode碼。

    具體如下:
    這裏寫圖片描述

三、Str與Unicode

在Python2中,str類型其實字節串,Unicode類型纔是真正的字符串,例如:

var = '學'
type(var)#output:<type 'str'>
repr(var)#output:"'\\xe5\\xad\\xa6'"

var = u'學'
type(var)#output:<type 'unicode'>
repr(var)#output:"u'\\u5b66'"

四、encode與decode

encode就是將字符以某種字符集的實現方式進行編碼,例如,想要將中文的’學’字以UTF-8的方式存儲,那麼我們可以如下操作:

var = u'學'
tmp = var.encode('utf-8')
print tmp #output:'\xe5\xad\xa6'

注意:最好使用unicode字符來encode,這樣可以避免很多麻煩;

decode就是將編碼的字節串解碼誠Unicode,如下:(接上面部分)

var = u'學'
tmp = var.encode('utf-8')
print tmp #output:'\xe5\xad\xa6'


tmp.deocde('utf-8')#output:u'\u5b66'
print tmp.deocde('utf-8')#output:'學'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章