python快速入門-字符編碼
來源:
奇酷教育 發(fā)表于:
python快速入門-字符編碼。
計算機中顯示的文字都需要編碼格式的支持,否則你只能看到0、1組成的神秘序列
什么是編碼:
計算機出生之初僅僅為了計算,所以只有數(shù)字0、1
后來,計算機有了更多的訴求,希望能記錄更多的文字信息,但是計算機還是只認識0、1怎么辦?
有人出了主意:讓數(shù)字0代表一個字,數(shù)字1代表一個字以此類推:
0--文字1
1--文字2
2--文字3
3--文字4
4--文字5
......
于是這樣的對照表就稱為編碼格式
編碼的變遷史:
早期計算機表示的數(shù)字很少:8位機時代 0-255 所以只能表示256個文字 ascii編碼格式/iso8859-1
chr(數(shù)字)可以將數(shù)字變?yōu)榇a表中的文字
print(chr(97))
計算機迅速傳入各個國家:中國出現(xiàn)了gbk(國標碼) gb2312(簡體碼) big5(繁體碼)
亂碼時代:各個國家都有各自的編碼格式,那么計算機在傳輸后,就會亂碼:
例:
可以使用內(nèi)置函數(shù)ord(‘文字’)獲取文字的底層數(shù)據(jù):
print(ord('中'))
“中”:底層數(shù)字是20013
但是可能韓文編碼下可能未對20013進行映射,那么就會顯示? 這就是亂碼!
大一統(tǒng)時代:unicode
unicode的出現(xiàn)讓亂碼亂象得到控制
unicode碼將幾乎所有文字都約束在它的編碼之下,世界使用一種碼,自然沒有亂碼
中文范圍:"\u4e00"--"\u9fa5"
print("\u4e2d")
現(xiàn)狀:utf-8
unicode作為國際統(tǒng)一碼,也叫雙字節(jié)編碼,不利于網(wǎng)絡(luò)傳輸,網(wǎng)絡(luò)大多流轉(zhuǎn)英文字符居多
so就出現(xiàn)了變種的unicode:utf-8:英文單字節(jié),其他文字三字節(jié)。
為了世界不再亂碼,請用utf-8?。?!
組碼:會得到一個bytes序列
字符串.encode(encoding='UTF-8', errors='strict')
解碼:會得到一個按編碼解析的字符串
字節(jié)序列.decode(encoding='UTF-8', errors='strict')
如果設(shè)置為strict,代表遇到非法字符時拋出異常;
如果設(shè)置為ignore,則會忽略非法字符;
如果設(shè)置為replace,則會用?取代非法字符;
如果設(shè)置為xmlcharrefreplace,則使用XML的字符引用