原文來源 https://www.jmjc.tech/tutoria...
咱們在顯示屏上看的字母a、b、c...最終都會被轉換成0/1序列, 由於計算機只能識別0和1。從數字到字母的轉換都過程,計算機須要依賴於一個相似於字典的東西,它是權威標準的,每一臺計算機都要按照它都規定,最先誕生的字典,名爲ASCII。python
一個字節(byte)是8位的二進制0000 0000,總共表明256種狀態。最初的計算機只流行於英語國家,英文的字母大小寫總共是52個,加上一些經常使用的符號,數字,這個字典的長度是128位,因此ASCII佔用一個字節。編碼
【 ASCII對照表 】.net
後來,計算機發展到了世界各地,只表示英文和數字的ASCII已經知足不了各國的需求,你們紛紛發展出本身語言的字典,好比中國的GBK。 這樣頗有問題,夾雜着各類語言的文檔,常常會被解析出來一大堆 亂碼。爲了統一,你們商議決定,制定一個通用的字典unicode。code
unicode是在ASCII的基礎上擴展的,對原有ASCII字符徹底兼容。長度上從原來的0000 0000,擴展到了0000 0000 0000 0000,佔用2個字節,能夠容納65535個字符。utf-8
# ASCII 字母 A 0110 0001 # 十進制 = 97 # unicode 字母 A 0000 0000 0110 0001 # 十進制 = 97 | ASCII字符就在前面補8位的0
unicode是一個字典,也叫字符集,是信源編碼。而UTF-8是信道編碼,咱們數據在傳輸的時候,都會被解析成UTF-8。unicode
UTF-8是在unicode的基礎上,進行編碼和解碼,針對unicode傳輸實現的編碼還有UTF-16 / UTF-32等...文檔
UTF-8是變長的,不一樣的文字有不一樣的長度,英文字母通常是1 byte,漢字是3 byte。get
在Python3以前的Python版本,使用的是ASCII編碼,因此對中文的支持很頭,如今已經原生的支持unicode。字符編碼
# 正 unicode >>> ord('a') 97 # 反 unicode >>> chr(97) 'a' # 中文 >>> ord('哦') 21734
# 編碼 >>> 'a'.encode('utf-8') b'a' >>> '哦'.encode('utf-8') b'\xe5\x93\xa6' # 解碼 >>> b'\xe5\x93\xa6'.decode('utf-8') '哦'
二進制數據類型,1 byte是8位的二進制0000 0000。基礎
>>> len('哦') # 1個字符 1 >>> len('哦'.encode('utf-8')) # 3個字節 3 # 以上是字節和字符的關係