Python | Python學習之unicode和utf8

Python | Python學習之unicode和utf8

中文亂碼、unicode和utf8

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

開始之前我們先了解下ASCII、GB2312、unicode、UTF-8都是啥?

編碼演化史


ASCII編碼

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

GB2312

有了上面的情況,我大中國表示不服,我們中國漢字博大精深,255個明顯是滿足不了我們的需求的,於是我們就發明了GB2312編碼(用兩個字節表示漢字),不僅包含了ASCII碼還能表示我們的中國的漢字,於是有了我們中國的例子,世界各國紛紛研究出了支持自己語言的編碼,在這種情況下多種語言混合顯示就出現了亂碼的情況了,對於這種情況就出現了unicode編碼將所有語言統一到一起。

unicode

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

UTF8

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

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示意圖

Linux

按照上面解讀,我們在Linux系統下操作如下:

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學習之多線程詳解

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