經過python3學習編碼

簡介

今天在寫python程序的時候,遇到了編碼問題,今天,我準備好好了解一下編碼問題python

ASCII編碼

計算機是美國人發明的,最初只有不超過256字符須要編碼,1字節能編碼2**8個,因此ASCII編碼就是這麼來的。如今的鍵盤,不用輸入法能打出來的字符,都在ASCII碼錶裏。編程

其餘編碼

後來,計算機逐漸普及,須要編碼其餘國家的字符,好比中文,日文,韓文,中國有GB2312等(固然,會佔用多個字節),其餘國家也有各自的編碼表。可是這有個問題,若是一串字符有多個國家的語言,沒法處理。json

Unicode

Unicode將各類國家字符統一編碼。這樣便解決了統一編碼的問題。Unicode很是適合在內存中使用,同一種語言,編碼格式是相近的,便於計算。可是,當須要存儲的時候,就不太合適了,浪費空間。編碼

ustring = '中'
print('--- Unicode ---')
ubyte = ustring.encode('unicode_escape')
print(len(ubyte))
print(ubyte)  # 直接輸出第一個\是轉義
print(''.join([chr(c) for c in ubyte]))

輸出結果:code

--- Unicode ---
6
b'\\u4e2d'
\u4e2d

能夠看到,一箇中文的字,就佔了6個字節,編碼其實只有4個字節4e2d,但\u,也要存儲內存

UTF-8

爲了便於減少傳輸和存儲的大小,UTF-8編碼出現了。一樣是utf-8

print('--- UTF-8 ---')
ubyte = ustring.encode('utf-8')
print(len(ubyte))
print(ubyte)
print(''.join([chr(c) for c in ubyte]))

輸出以下:ci

--- UTF-8 ---
3
b'\xe4\xb8\xad'
ä¸-

只佔用了3個字節,\x是python加上去的,表明16進制方式讀取,也就是e4, b8, ad這三個字節。可能會有人不知道e4爲啥是一個字節,16進制和2進制對應以下,佔4位,一個字節8位,因此是兩個字符unicode

0 = 0000
1 = 0001
...
a = 0110
...
e = 1110
f = 1111

json的編碼

爲啥今天我會想好好了解一下編碼呢,由於我在編程的時候用到了json,有趣的是,python中json的編碼方式默認使用的不是utf-8,而是unicode,我還傻傻分不清楚,暈了半天。不過使用json.dumps和json.loads其實根本遇不到這個問題string

相關文章
相關標籤/搜索