Python——各種編碼詳解

抄了各種資料的分析以後得出了結論~~~~~~~~~~~~~~~~~~~~~~

我們知道,計算機是以二進制爲單位的,也就是說計算機只識別0和1,也就是我們平時在電腦上看到的文字,只有先變成0和1,計算機纔會識別它的意思。這種數據和二進制的轉換規則就是編碼。計算機的發展中,有ASCII碼,GBK,Unicode,utf-8編碼。我們先從編碼的發展史瞭解一下編碼的進化過程。

編碼發展史

  • 美國人發明了計算機,用八位0和1的組合,一一對應英文中的字符,整出了一個表格,ASCII表
  • 計算機傳入中國,中國地大物博,繁體字和簡體字多,8位字節最多表示256個字符,滿足不了,於是對ASCII擴展,新表叫GB2312
  • 後來發現GB2312還不夠用,擴充之後形成GB18030。
  • 每個國家都像中國一樣,把自己的語言編碼,於是出現了各種各樣的編碼,如果你不安裝相應的編碼,就無法解釋相應編碼想表達的內容。
  • 各自編碼無法國際交流。一個國際組織一起創造了一種編碼 UNICODE(Universal Multiple-Octet Coded Character Set)規定所有字符用兩個字節表示,就是固定的,所有的字符就兩個字節,計算機容易識別。2的16次方可以表示所有的字符了。
  • UNICODE雖然解決了各自爲戰的問題,但是美國人不願意了,因爲美國原來的ASCII只需要一個字節就可以了。UNICODE編碼卻讓他們的語言多了一個字節,白白浪費一個字節的存儲空間。經過協商,出現了一種新的轉換格式,被稱爲通用轉換格式,也就是UTF(unicode transformation format).常見的有utf-8,utf-16。utf-8規定,先分類,美國字符一個字節,歐洲兩個字符,東南亞三個字符。

encode()和decode()

  • decode英文意思是 解碼,encode英文原意 編碼
  • 字符串在Python內部的表示是unicode編碼,因此,在做編碼轉換時,通常需要以unicode作爲中間編碼, 即先將其他編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。
  • decode的作用是將其他編碼的字符串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字符串str1轉換成unicode編碼。
  • encode的作用是將unicode編碼轉換成其他編碼的字符串,如str2.encode('gb2312'),表示將unicode編碼的字符串str2轉換成gb2312編碼。
  • 總得意思:想要將其他的編碼轉換成utf-8必須先將其解碼成unicode然後重新編碼成utf-8,它是以unicode爲轉換媒介的 如:s='中文' 如果是在utf8的文件中,該字符串就是utf8編碼,如果是在gb2312的文件中,則其編碼爲gb2312。這種情況下,要進行編碼轉換,都需要先用 decode方法將其轉換成unicode編碼,再使用encode方法將其轉換成其他編碼。通常,在沒有指定特定的編碼方式時,都是使用的系統默認編碼創建的代碼文件

 

 

 

python3在內存中以unicode編碼形式存儲數據,其數據類型是str。

所以當與外部文件進行交互時,要首先確認外部文件的類型,在python中導入外部文件時,對外部文件進行解碼,轉換成unicode,將python中的內容輸出到外部文件時,對其進行編碼即可。

utf-8編碼漢字一般佔用字節數爲3~4字節

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章