字符編碼
- 計(jì)算機(jī)由于是美國人發(fā)明艇搀,因此只有127個(gè)字母編碼到計(jì)算機(jī)里啄刹,也就是大小寫英文字母忆嗜、數(shù)字和一些符號(hào)。該表又稱為ASCII編碼
- 中國制定了GB2312編碼來進(jìn)行中文的編進(jìn)
- 由于各個(gè)國家的編碼復(fù)雜性淑玫,Unicode應(yīng)運(yùn)而生巾腕,Unicode將所有的語言都統(tǒng)一到一套編碼里面面睛,這樣就不會(huì)在有亂碼出現(xiàn)。
- ASCII編碼和Unicode編碼的區(qū)別是:ASCII編碼是1個(gè)字節(jié)尊搬,而Unicode是通常是2個(gè)字節(jié)叁鉴。
- 盡管Unicode將編碼統(tǒng)一了,亂碼問題消失了佛寿,但是如果基本都是英文的話亲茅,用Unicode編碼要比ASCII編碼多一倍的存儲(chǔ)空間,在存儲(chǔ)和傳輸上是否不劃算狗准;因此又出現(xiàn)了降Unicode編碼轉(zhuǎn)化為“可變成編碼”UTF-8編碼。UTF-8編碼把一個(gè)Unicode字符根據(jù)不同的數(shù)字大小編碼成1-6個(gè)字節(jié)茵肃,常用的英文字母被編碼為1個(gè)字節(jié)腔长,漢字通常是3個(gè)字節(jié),只有很生僻的才編碼為4-6個(gè)字節(jié)验残。
- 現(xiàn)在計(jì)算機(jī)系統(tǒng)通用的字符編碼工作:在計(jì)算機(jī)內(nèi)存中統(tǒng)一使用Unicode捞附,而需要保存到硬盤或者傳輸?shù)臅r(shí)候,就轉(zhuǎn)換為UTF-8編碼您没;
- 關(guān)系例子
字符 | ASCII | Unicode | UTF-8 |
---|---|---|---|
A | 0100000 | 000000001000001 | 01000001 |
中 | x | 01001110 00101101 | 11100100 10111000 10101101 |
Python字符串
- 在最新的Python3版本中鸟召,字符串是以Unicode編碼的,因此Python支持多種語言
- 對(duì)于單個(gè)字符的編碼氨鹏,Python提供了
ord()
函數(shù)獲取字符的整數(shù)表示欧募,chr()
函數(shù)把編碼轉(zhuǎn)換為對(duì)應(yīng)的字符 - Python的字符串類型是str,在內(nèi)存中以Unicode表示仆抵,一個(gè)字符對(duì)應(yīng)若干個(gè)字節(jié)跟继,如果要傳輸或者保存,需要將str轉(zhuǎn)換為字節(jié)為單位
bytes
镣丑;對(duì)于bytes
類型數(shù)據(jù)用帶b前綴的單引號(hào)或雙印好表示 - Pyhont提供
encode
和decode
l兩種方式進(jìn)行字符編碼的轉(zhuǎn)換 -
len()
函數(shù)計(jì)算str是字符數(shù)舔糖,計(jì)算bytes則為字節(jié)數(shù) - 為了避免亂碼問題,應(yīng)當(dāng)時(shí)鐘堅(jiān)持使用UTF-8編碼對(duì)str和bytes轉(zhuǎn)換
格式化
- Python的格式化方式和C語言保持一致用
%
實(shí)現(xiàn) - 字符串里面的
%
是一個(gè)普通的字符則需要轉(zhuǎn)移用%%
來表示%
總結(jié)
牢記采用UTF-8來編碼莺匠,亂碼將不再是問題金吗,了解了ASCII、Unicode以及UTF-8的歷史不錯(cuò)