下午看廖雪峯的Python2.7教程,看到 字符串和編碼 一節,有一點感覺,結合 崔慶才的Python博客 ,把這種感覺記錄下來:html
ASCII碼:是用一個字節(8bit, 0-255)中的127個字母表示大小寫字母,數字和一些符號.主要用來表示現代英語和西歐語言。python
因此處理中文就出現問題了,由於中文處理至少須要兩個字節,因此中國製定了GB2312。瀏覽器
因此,各國制定了各國的標準。日本製定了Shift_JIS
,韓國製定了Euc-kr。。。那麼,亂碼就來了。
服務器
爲了統一,Unicode誕生了。統一碼把全部語言都統一到一套編碼裏。解決了亂碼問題,可是存儲和傳輸效率低下的問題又來了。網站
由於ASCII編碼是1個字節,而Unicode編碼一般是2個字節。你表示一個英文字母一個字節就夠了,可是Unicode卻不得不用兩個字節來表示(另外一個字節補0)。ui
爲了節約,出現了把Unicode編碼轉化爲「可變長編碼」的UTF-8
編碼。UTF-8編碼把一個Unicode字符根據不一樣的數字大小編碼成1-6個字節,經常使用的英文字母被編碼成1個字節,漢字一般是3個字節,只有很生僻的字符纔會被編碼成4-6個字節。若是你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間(ASCII碼能夠當作是UTF-8的一部分,因此大量只支持ASCII編碼的歷史遺留軟件能夠在UTF-8編碼下繼續工做)。編碼
如今若是我要用Notepad編輯一個python的腳本,我打開文件的過程當中,內存中就開闢了一段空間,來臨時存儲我保存的代碼,在計算機內存中,統一使用Unicode編碼。code
因此我寫的中文字符串,要在前面加u表示是Unicode編碼的字符串。htm
靜覓博客中也是:blog
可是爲何有時候,咱們要用到decode('utf-8'),再結合靜覓博客來看:
由於糗事百科的服務器發送給客戶端(也就是瀏覽器)的響應的編碼就是‘UTF-8':
爲了在文本編輯(讀取文本)時,內存中須要Unicode編碼,因此用decode('utf-8')解碼,把UTF-8轉化爲Unicode編碼(同理,encode('utf-8')是把Unicode轉化爲UTF-8編碼)。
當保存文本到保存到硬盤或者須要傳輸的時候,就轉換爲UTF-8編碼,因此咱們須要在python腳本開頭定義#-*-coding:utf-8-*-
圖片來源
廖雪峯的官方網站:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386819196283586a37629844456ca7e5a7faa9b94ee8000
靜覓 崔慶才的我的博客:http://cuiqingcai.com/990.html