上一篇: 8種字元串常⻅操作| 手把手教你入門Python之二十七 下一篇: 介紹2種成員運算符 | 手把手教你入門Python之二十九 本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程 《Python入門2020最新大課》 ,主講人姜偉。
字元集
計算機隻能處理數字(其實就是數字0和數字1),如果要處理⽂本,就必須先把⽂本轉換為數字才能處理。最早的計算機在設計時采⽤8個⽐特(bit)作為⼀個位元組(byte),是以,⼀個位元組能表示的最⼤的整數就是255(⼆進制11111111=⼗進制255),0 - 255被⽤來表示⼤⼩寫英⽂字⺟、數字和⼀些符号,這個編碼表被稱為ASCII編碼。
ASCII碼表使⽤7位⼆進制表示⼀個字元,它的區間範圍時0~127,⼀共隻能表示128個字元,僅能⽀持英語。随着計算機科學的發展,⻄歐語⾔、希臘語、泰語、阿拉伯語、希伯來語等語⾔的字元也被添加到碼表中,形成了⼀個新的碼表ISO8859-1(⼜被稱為Latin1)碼表。ISO8859-1使⽤8位⼆進制表示⼀個字元串,完全相容ASCII碼表。
Unicode(統⼀碼、萬國碼、單⼀碼)是計算機科學領域⾥的⼀項業界标準,包括字元集、編碼⽅案等。
Unicode 是為了解決傳統的字元編碼⽅案的局限⽽産⽣的,它為每種語⾔中的每個字元設定了統⼀并且唯⼀的⼆進制編碼,以滿⾜跨語⾔、跨平台進⾏⽂本轉換、處理的要求。
字元和編碼互相轉換
使⽤chr和ord⽅法,可以實作字元和編碼之間的互相轉換。
print(ord('a')) # 使⽤ord⽅法,可以擷取⼀個字元對應的編碼
print(chr(100)) # 使⽤chr⽅法,可以擷取⼀個編碼對應的字元
編碼規則
使⽤Unicode為每種語⾔的每個字元都設定了唯⼀的⼆進制編碼,但是它還是存在⼀定的問題,不夠完美。
例如,漢字 “你” 轉換成為⼀個字元結果是 0x4f60 ,轉換成為⼆進制就是 01001111 01100000 ,此時
就有兩個問題:
- 1001111 01100000 到底是⼀個漢字 “你” ,還是兩個 Latin1 字元?
-
如果Unicode進⾏了規定,每個字元都使⽤n個⼋位來表示,對于Latin1字元來說,⼜會浪費很多存儲空
間。
為了解決這個問題,就出現了⼀些編碼規則,按照⼀定的編碼規則對Unicode數字進⾏計算,得出新的編
碼。在中國常⽤的字元編碼有 GBK , Big5 和 utf8 這三種編碼規則。
使⽤字元串的encode⽅法,可以将字元串按照指定的編碼格式轉換稱為⼆進制;使⽤decode⽅法,可以将⼀個⼆進制資料按照指定的編碼格式轉換成為字元串。
s1 = '你'.encode('utf8') # 将字元 你 按照utf8格式編碼稱為⼆進制
print(type(s1)) # <class 'bytes'>
print(s1) # b'\xe4\xbd\xa0'
s2 = s1.decode('utf8') # 将⼆進制按照utf8格式解碼稱為字元串
print(s2)
s3 = '你'.encode('gbk') # 将字元 你 按照gbk格式轉換稱為⼆進制
print(s3) # b'\xc4\xe3'
s4 = s3.decode('gbk') # 将⼆進制按照gbk格式解碼稱為字元
print(s4)
思考:⽂字産⽣亂碼的原因以及解決⽅案。
