字符編碼的發(fā)展可以用一句話來(lái)形容,就是天下大勢(shì),分久必合,合久必分。
由于現(xiàn)代計(jì)算機(jī)的起源是美國(guó)嘛,他們當(dāng)時(shí)根本就沒(méi)看有考慮過(guò)其他國(guó)家也能用上電腦,所以他們僅僅是把英文字符,以及鍵盤上我們看到的那些特殊符號(hào)和數(shù)字,建立了對(duì)應(yīng)關(guān)系。
于是就有了最早的ASCII碼表,它的全稱是American Standard Code for Information Interchange,翻譯過(guò)來(lái)就是美國(guó)信息互換標(biāo)準(zhǔn)代碼。
由于這個(gè)ASCII碼表里面,只有英文字符和數(shù)字的對(duì)應(yīng)關(guān)系,很簡(jiǎn)單嘛,當(dāng)然還有一些特殊符號(hào)。
其實(shí)也就是一個(gè)英文對(duì)應(yīng)一個(gè)數(shù)字,我說(shuō)的數(shù)字最后都會(huì)轉(zhuǎn)成二進(jìn)制的,后面我就不再?gòu)?qiáng)調(diào)了。
那如果我們來(lái)設(shè)計(jì)這個(gè)ASCII碼表的話,我們會(huì)用幾位二進(jìn)制數(shù),來(lái)對(duì)應(yīng)一個(gè)英文字符呢?
如果我們只用一位二進(jìn)制數(shù)的話,一位二進(jìn)制數(shù)只有兩種變化,要么是是一,要么是0。它只能對(duì)應(yīng)兩個(gè)英文字符,如果我用兩位二進(jìn)制數(shù)來(lái)對(duì)應(yīng)一個(gè)英文字符的話,他就有四種變化了,00、01、10、11。
這樣就可以對(duì)應(yīng)四個(gè)英文字符,但是很明顯,兩位二進(jìn)制數(shù)也是不夠了?,F(xiàn)在我們知道,只要我們?cè)黾佣M(jìn)制數(shù)的位數(shù),能夠?qū)?yīng)的字符也就越多。
最終這個(gè)ASCII碼表,它采用了8位二進(jìn)制數(shù),來(lái)對(duì)應(yīng)一個(gè)英文字符。為什么是8位呢?其實(shí)現(xiàn)在我們鍵盤上敲出來(lái)的符號(hào),包括空格、數(shù)字、大小寫字母,以及一些括號(hào)大于小于等于等等其它的符號(hào),一共也就95個(gè)。然后還有33個(gè)通用控制符,一共是128個(gè)。
這個(gè)表我們可以來(lái)看一眼。
它從0到31,還有最后一個(gè)127,就是對(duì)應(yīng)剛剛我們說(shuō)的33個(gè)通用控制符,這些控制符大多用于控制打印機(jī)等外部的設(shè)備的,還有一些ESC鍵、刪除鍵、退格鍵等等。
然后32是對(duì)應(yīng)的空格,48到57對(duì)應(yīng)10個(gè)阿拉伯?dāng)?shù)字0到9,65到90對(duì)應(yīng)26個(gè)大寫英文字母,97到122對(duì)應(yīng)26個(gè)小寫英文字母。其余為一些標(biāo)點(diǎn)符號(hào)、運(yùn)算符號(hào)等等。
0到127嘛,一共是128個(gè)。
也就是我們?cè)谶@里輸入個(gè)1,它背后幫我們存到內(nèi)存里的其實(shí)是49,對(duì)應(yīng)的二進(jìn)制數(shù)是110001,我們輸入小寫的z,最后存到內(nèi)存里的就是122所對(duì)應(yīng)的二進(jìn)制數(shù)1111010。
我們前面講的字符串比大小,其實(shí)也是參照這個(gè)表來(lái)比的,這個(gè)表不用去傻傻的記,了解就行了。
然后我們打開(kāi)交互式環(huán)境cmd算一下,多少二進(jìn)制數(shù)才可以表示0到127,一共128個(gè)數(shù)。
二的七次方是128,也就是說(shuō)我們采用七位二進(jìn)制數(shù)就已經(jīng)能夠把所有英文字符以及鍵盤上所有對(duì)應(yīng)字符對(duì)應(yīng)完了。
那為什么美國(guó)人要用8位呢?這其實(shí)是為了給后期的擴(kuò)展留有一些空間,如果以后還想往里面加內(nèi)容的話,也還有空間可以加。當(dāng)然后面的空間他們也用了。他們把拉丁文也加到這個(gè)表里去了。
這就是字符編碼的初期ASCII碼表。
未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » Python ASCII碼表