day4-python基礎-編碼相關

目錄python

1.編碼的歷史python3.x

2.python 3.x中的bytes與stride

3.編碼的轉換函數

正文開始編碼

1.編碼的歷史與發展spa

1.1編碼歷史變動code

  編碼能夠理解爲諜戰片中電報的密碼本,若是要想讓電腦識別要輸入的文本,須要將文本轉換爲電腦能識別的機器語言blog

  因爲發明計算機的是美國人,因此最開始的編碼表就是美國人所設定,所設定的這個表就爲ASCII碼,ASCII碼包含字母大小寫、數字以及特殊符號。ASCII碼使用8bit,一個字節表達一個字符,因此作多顯示爲2**8-1個字符,也就是255個字符,例如00000001        autf-8

  後面因爲計算機的普遍傳播,ASCII碼已經徹底不能知足人們的平常須要,這個時候就出現了萬國碼,unicode,使用16bit,2個字節表示一個字符,後面使用後發現並不能實現,這個時候就進行了升級,此時採用32bit,也就是四個字節表示一個字符,雖然基本包含了全部的字符,可是,使用這種編碼佔用空間就很大;最終在後期的升級下,採用瞭如今大範圍使用的UTF-8編碼格式,對於英文以及傳統的特殊字符采用ASCII編碼,也就是8bit,一個字節,對於歐洲地區採用16bit,也就是2字節表示一個字符,對於亞洲區域則採用24bit,也就是三個字節顯示一個字符。unicode

  過於國內的字符編碼,在unicode和utf-8沒有大規模使用的期間,我國有本身的一套獨立的編碼格式,由最開始的GB2312到後面的GBK在到最新的GB18130,對於國內的編碼的格式主要是,英文等傳統特殊符號採用ASCII碼就行,對於中文則採用16bit,也就是2字節表示,這樣就形成不一樣國家不一樣的字符規格。

  實例

  'old男孩'在GBK中是7字節,在utf-8是9字節

  在python 2.7版本中,默認爲ASCII碼,不支持中文,若是須要輸入中文必須在文首輸入如下

  # -*- encoding:utf-8 -*-

  1.2進制的區別

  進制主要有二進制,八進制,十進制,十六進制

  二進制:只有01

  八進制:0-7

  十進制:0-9

  十六進制:0-E

   1.2.1二進制轉十進制以及十進制轉換二進制

二進制轉化成十進制
1101      ---> 
0*2**7+0*2**6+1*2**5+0*2**4+1*2**3+1*2**2+0*2**1+1*2**0
1*2**5+1*2**3+1*2**2+1*2**0 = 32 + 8 + 4 + 1 = 45

十進制轉化成二進制 : 對2取餘,逆向排列
  ——-> 0010 1010

2.python3.x中的bytes與str

回到bytesstr的身上。bytes是一種比特流,它的存在形式是01010001110這種。咱們不管是在寫代碼,仍是閱讀文章的過程當中,確定不會有人直接閱讀這種比特流,它必須有一個編碼方式,使得它變成有意義的比特流,而不是一堆晦澀難懂的01組合。由於編碼方式的不一樣,對這個比特流的解讀也會不一樣,對實際使用形成了很大的困擾。下面讓咱們看看Python是如何處理這一系列編碼問題的:

>>> s = "中文"
>>> s
'中文'
>>> type(s)
<class 'str'>
>>> b = bytes(s, encoding='utf-8')
>>> b
b'\xe4\xb8\xad\xe6\x96\x87'
>>> type(b)
<class 'bytes'>

從例子能夠看出,s是個字符串類型。Python有個內置函數bytes()能夠將字符串str類型轉換成bytes類型,b其實是一串01的組合,但爲了在ide環境中讓咱們相對直觀的觀察,它被表現成了b'\xe4\xb8\xad\xe6\x96\x87'這種形式,開頭的b表示這是一個bytes類型。\xe4是十六進制的表示方式,它佔用1個字節的長度,所以」中文「被編碼成utf-8後,咱們能夠數得出一共用了6個字節,每一個漢字佔用3個,這印證了上面的論述。在使用內置函數bytes()的時候,必須明確encoding的參數,不可省略。

咱們都知道,字符串類str裏有一個encode()方法,它是從字符串向比特流的編碼過程。而bytes類型剛好有個decode()方法,它是從比特流向字符串解碼的過程。除此以外,咱們查看Python源碼會發現bytesstr擁有幾乎如出一轍的方法列表,最大的區別就是encodedecode

從實質上來講,字符串在磁盤上的保存形式也是01的組合,也須要編碼解碼。

若是,上面的闡述還不能讓你搞清楚二者的區別,那麼記住下面兩幾句話:

  1. 在將字符串存入磁盤和從磁盤讀取字符串的過程當中,Python自動地幫你完成了編碼和解碼的工做,你不須要關心它的過程。

  2. 使用bytes類型,實質上是告訴Python,不須要它幫你自動地完成編碼和解碼的工做,而是用戶本身手動進行,並指定編碼格式。

  3. Python已經嚴格區分了bytesstr兩種數據類型,你不能在須要bytes類型參數的時候使用str參數,反之亦然。這點在讀寫磁盤文件時容易碰到。

在bytes和str的互相轉換過程當中,實際就是編碼解碼的過程,必須顯式地指定編碼格式。

3.編碼的轉換

對於編碼的轉換,只須要記住下面這個圖就行了

S0OL)R{IYS]~)MT6F)718_A

相關文章
相關標籤/搜索