不是我軸,非要用2.7(筆試題一般python的只支援2.7),日常我一直用3.0,然後某天我報了HW的筆試題,第一道是字串的,我當時就開心了。字串啊,我最會了!
BTW,看了題目就知道自己有多辣J,題目要求接收一個Unicode形式的字串,然後輸出。
當時我就懵了,哈?編碼不是隻有UTF-8和ASCii麼?
-
二進位制、Ascii、Unicode、UTF-8之間的關係 複製程式碼
-
具體操作與實現 複製程式碼
二進位制、Ascii、Unicode、UTF-8之間的關係
二進位制:
計算機裡面所有資訊最後都是以二進位制處理或者顯示等,一個位元組有8位,每位有兩個狀態'0'和'1',因此一個位元組可以表示256種狀態。
Ascii:
那麼問題來了我們怎麼把我們已知的字母等語言表示成二進位制呢,那麼這之間肯定有一種約定俗成或者說是“協議”一樣的東西。那麼Ascii碼就定義了大小寫字母特殊字元的二進位制表示形式。它在一定範圍內解決了一部分問題。
同時也丟擲y了問題:也就是說這也只能將英文轉換成二進位制進行儲存,那麼世界上這麼多語言,他也解決不了啊?
anyway這個問題提出來以後就必須說到下面x兩種編碼了:
Unicode:
中文用一個位元組來表示顯然不夠,所以至少要兩位元組,還不能跟Ascii碼衝突,Unicode編碼就用了一套編碼來表示所有語言。Unicode是解決了語言的問題,但是引出了新的問題因為Unicode中都是兩位元組表示一個字,浪費儲存空間啊!,然後就引出了另外一套
UTF-8:
可變長的編碼,因為漢字2-6位元組,但是數字如果和Unicode使用一套標準太浪費空間,所以出現了可變長的UTF-8,在儲存空間上這個問題得到了優化,數字被轉化為一個位元組,漢字被轉化為2-6個位元組。
#coding=utf-8
print('Unicode:')
print(repr(u'Unicode編碼'))
# 二進位制編碼演示
print(u'二進位制編碼:')
print(repr('Unicode編碼'))
複製程式碼
cons:
可以看出二進位制與Unicode的區別:
所以可以使用encode與decode相互轉化。
decode的作用是將其他編碼的字串轉換成unicode編碼。 encode的作用是將unicode編碼轉換成其他編碼的字串。
python2.7內建的預設環境為ascii,所以如果不屬於ascii範疇內,就會亂碼,通常我們會在開頭加上#coding=utf-8
所以轉換的時候Unicode屬於中間變數,搭了一個橋。
#coding=utf-8
'''unicode'''
ss=u'編碼'
print(repr(ss))
s=ss.encode('utf-8')
print(repr(s))
'''utf-8'''
s1='編碼'
print(repr(s1))
s1=s1.decode('utf-8')
print(repr(s1))
複製程式碼
輸出如圖: