Python | Python學習之unicode和utf8

Python | Python學習之unicode和utf8

中文亂碼、unicode和utf8

http://openskill.cn/article/448
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386819196283586a37629844456ca7e5a7faa9b94ee8000

開始以前咱們先了解下ASCII、GB23十二、unicode、UTF-8都是啥?python

編碼演化史


ASCII編碼

在好久好久之前,美國人發明了計算機,計算機只能處理數字也就是把文字轉換爲8個bit也就是一個字節,8個bit最大能表示的數字爲255,而[A-Z]、[a-z]、[0-9]再加上鍵盤上的一些符號正好255個,因此ASCII編碼就成爲了美國人的標準編碼(用一個字節表明一個字母或者符號),正好也知足了美國人的需求。windows

GB2312

有了上面的狀況,我大中國表示不服,咱們中國漢字博大精深,255個明顯是知足不了咱們的需求的,因而咱們就發明了GB2312編碼(用兩個字節表示漢字),不只包含了ASCII碼還能表示咱們的中國的漢字,因而有了咱們中國的例子,世界各國紛紛研究出了支持本身語言的編碼,在這種狀況下多種語言混合顯示就出現了亂碼的狀況了,對於這種狀況就出現了unicode編碼將全部語言統一到一塊兒。多線程

unicode

unicode編碼的出現解決了多國語言展現亂碼的問題,可是unicode的解決方案在全英文文檔展現的狀況下,unicode編碼會比ASCII編碼多一倍的存儲空間(unicode的編碼是16bit的,在表示ASCII編碼時是直接在前面加上8個0)相應的在傳輸的時候就多了一倍的傳輸時間,在這種狀況下就出現了UTF8編碼。python2.7

UTF8

UTF8編碼相比於8bit的ASCII編碼和16bit的unicode編碼來講,UTF8編碼是不定長的,它可使用兩個字節表明英文,用三個字節表明中文,UTF8這個時候優點就很大了,在實際運用中,咱們能夠將文件編碼互相轉換以獲取最大化的利用內存,把文件保存在內存中咱們採用內存佔用更小的UTF8編碼的格式,讀寫文件時咱們採用更大更全的unicode編碼,具體實例圖以下:ide

Python | Python學習之unicode和utf8

示例圖學習

代碼演示


Python2.7

windows編碼

Python | Python學習之unicode和utf8

在python2.7中當要將字符串encode爲utf8,咱們須要確保以前的字符串的編碼方式爲unicode,因此當字符串編碼不爲unicode時,咱們須要使用decode方法,而在使用decode方法時咱們須要指明原有字符串的編碼格式(在windows系統中解釋器默認編碼爲GB2312,Linux系統中爲UTF-8編碼),因此就有了s.decode("gb2312").encode("utf-8")。
Python | Python學習之unicode和utf8線程

decode示意圖code

Linux

按照上面解讀,咱們在Linux系統下操做以下:blog

Python | Python學習之unicode和utf8

這裏就有一個疑問既然原有系統默認的字符串編碼爲utf-8,爲何不能夠直接使用s.decode().encode('utf-8')?緣由就是,如若不指定原有的系統編碼格式(utf-8),Linux系統下會調用python解釋器的默認編碼ASCII解析字符串,演示以下:

Python | Python學習之unicode和utf8
因此在根據上面的狀況,在python2中出現編碼互轉的狀況,能夠參考下圖:

Python | Python學習之unicode和utf8

Python3.6

Python2.7和Python3.6最大的區別就是在執行Python2.7項目時,當項目中包含漢字時,須要在文件頭聲明編碼格式,不然項目中的中文顯示就是亂碼。
而在Python3中徹底沒有這樣的顧慮,那是由於默認python3中所有的字符串就是unicode能夠直接使用encode方法。

Python | Python學習之unicode和utf8

綜上:爲了不給本身添麻煩,請認準unicode和UTF-8編碼。

寫在後面


這是鹹魚的第6篇學習筆記。

推薦閱讀


Python | Python學習之初識Scrapy

Python | Scrapy必備之配置虛擬環境

Python | Python學習之多線程詳解

相關文章
相關標籤/搜索