刨根究底字符編碼之三——字符編碼的由來

字符編碼的由來

一、為什么需要對(duì)字符進(jìn)行編碼

1.

計(jì)算機(jī)一開始發(fā)明出來時(shí)是用來解決數(shù)字計(jì)算問題的,后來人們發(fā)現(xiàn),計(jì)算機(jī)還可以做更多的事,例如文本處理。

但計(jì)算機(jī)其實(shí)挺笨的,它只“認(rèn)識(shí)”010110111000…這樣由0和1兩個(gè)數(shù)字組成的二進(jìn)制數(shù)字,這是因?yàn)橛?jì)算機(jī)的底層硬件實(shí)現(xiàn)就是用電路的開和閉兩種狀態(tài)來表示0和1兩個(gè)數(shù)字的。因此,計(jì)算機(jī)只可以直接存儲(chǔ)和處理二進(jìn)制數(shù)字。

2.

為了在計(jì)算機(jī)上也能表示、存儲(chǔ)和處理像文字、符號(hào)等等之類的字符,就必須將這些字符轉(zhuǎn)換成二進(jìn)制數(shù)字。

當(dāng)然,肯定不是我們想怎么轉(zhuǎn)換就怎么轉(zhuǎn)換,否則就會(huì)造成同一段二進(jìn)制數(shù)字在不同計(jì)算機(jī)上顯示出來的字符不一樣的情況,因此必須得定一個(gè)統(tǒng)一的、標(biāo)準(zhǔn)的轉(zhuǎn)換規(guī)則。

二、EBCDIC碼與ASCII碼

1.

于是最開始出現(xiàn)了EBCDIC(Extended Binary Coded Decimal Interchange Code擴(kuò)展二進(jìn)制編碼的十進(jìn)制交換碼)編碼標(biāo)準(zhǔn)。EBCDIC碼是由國際商用機(jī)器公司(IBM)為大型機(jī)操作系統(tǒng)而開發(fā)設(shè)計(jì)的,于1964年推出。

在EBCDIC碼中,英文字母不是連續(xù)排列的,中間出現(xiàn)多次斷續(xù),這帶來了一些困擾和麻煩。

因此,在后來IBM的個(gè)人計(jì)算機(jī)和工作站操作系統(tǒng)中并沒有采用EBCDIC碼,而是采用了晚于EBCDIC碼推出、且后來成為了英文字符編碼工業(yè)標(biāo)準(zhǔn)的ASCII編碼方案。

EBCDIC編碼表

2.

ASCII碼(American Standard Code for Information Interchange美國信息交換標(biāo)準(zhǔn)碼),由美國國家標(biāo)準(zhǔn)學(xué)會(huì)ANSI(American National Standard Institute)于1968年正式制定。

之后,又于1972年被ISO/IEC采用,制定為ISO/IEC 646標(biāo)準(zhǔn)(ISO,即國際標(biāo)準(zhǔn)化組織International Standardization Organization,成立于1946年;IEC,即國際電工技術(shù)委員會(huì)International Electrotechnical Commission,成立于1906年;ISO/IEC往往用來表示由這兩大國際組織聯(lián)合制定的標(biāo)準(zhǔn))。

由于ASCII碼要晚于EBCDIC碼出現(xiàn)(網(wǎng)上也有文章說是ASCII碼要早于EBCDIC碼開始設(shè)計(jì),但1968年ASCII碼才正式確定為標(biāo)準(zhǔn)),ASCII碼的編碼方式參照了EBCDIC碼,并吸取了其經(jīng)驗(yàn)教訓(xùn),將英文字母進(jìn)行了連續(xù)排列,這方便了程序處理。

3.

ASCII編碼方案雖然不是最早出現(xiàn)的字符編碼方案,但卻是最基礎(chǔ)、最重要、應(yīng)用最廣泛的字符編碼方案。

目前所通行的其他字符編碼方案,比如ISO-8859、GB系列(GB2312、GBK、GB18030、GB13000)、Big5、Unicode等等,均直接或間接兼容ASCII碼。

而像EBCDIC這樣與ASCII完全不兼容的編碼方案,基本上處于已淘汰或?qū)⒁蕴木车亍?/p>

三、ASCII字符編碼方案介紹

1.

ASCII碼使用七個(gè)二進(jìn)制數(shù)字(bit比特、位)來表示一個(gè)字符,總共表示128個(gè)字符(2^7 = 128,二進(jìn)制編碼為0000?0000 ~ 0111 1111,對(duì)應(yīng)的十進(jìn)制就是0~127)。

由于個(gè)人計(jì)算機(jī)普遍采用8位一個(gè)字節(jié)來進(jìn)行存取與處理,因此剩下最高位的那1比特一般為0,但有時(shí)也被用作一些通訊系統(tǒng)的奇偶校驗(yàn)位。

ASCII編碼表

2.

ASCII字符集共計(jì)有128個(gè)字符(見上表),碼點(diǎn)編號(hào)(即字符編號(hào))從0到127(二進(jìn)制為從0000 0000到0111 1111,十六進(jìn)制為從0x00到0x7F),二進(jìn)制最高位都是0。其中:

1)0~31:控制字符或通訊專用字符(不可顯示不可打印字符),如0x07(BEL響鈴)會(huì)讓計(jì)算機(jī)發(fā)出嗶的一聲、0x00(NUL空,注意不是空格)通常用于指示字符串的結(jié)束、0x0D(CR回車)和0x0A(LF換行)用于指示打印機(jī)的打印針頭退到行首(即回車)并移到下一行(即換行)等。

2)32~126:可顯示可打印字符(其中32為可顯示但不可打印的空格字符),48~57為0-9的阿拉伯?dāng)?shù)字,65~90為26個(gè)大寫英文字母,97~122為26個(gè)小寫英文字母,其余的是一些標(biāo)點(diǎn)符號(hào)、運(yùn)算符號(hào)等。

3)127:控制字符DEL。

3.

這時(shí)候的字符編解碼非常簡單,比如若要將字符序列編碼為二進(jìn)制流寫入存儲(chǔ)設(shè)備,只需要將該字符序列里的各個(gè)字符在ASCII字符集中的字符編號(hào)(即碼點(diǎn)編號(hào)),直接以一個(gè)二進(jìn)制字節(jié)寫入存儲(chǔ)設(shè)備即可,字符編號(hào)就是字符編碼,中間不需要經(jīng)過特別的編碼算法進(jìn)行字符編號(hào)到字符編碼的轉(zhuǎn)換計(jì)算,更不存在所謂碼元序列到字節(jié)序列的轉(zhuǎn)換。

上一篇:刨根究底字符編碼之二——關(guān)鍵術(shù)語解釋(下)

下一篇:刨根究底字符編碼之四——EASCII及ISO 8859字符編碼方案

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容