一杯咖啡的時間 擼順 Python 2.7 編碼

暴躁的熱心網友皮皮文發表於2018-06-06

不是我軸,非要用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:

一杯咖啡的時間 擼順 Python 2.7 編碼

可以看出二進位制與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))
複製程式碼

輸出如圖:

一杯咖啡的時間 擼順 Python 2.7 編碼

相關文章