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


字符編碼的由來

 

 

一、為什么需要對字符進行編碼

1.

計算機一開始發明出來時是用來解決數字計算問題的,后來人們發現,計算機還可以做更多的事,例如文本處理。

但計算機其實挺笨的,它只“認識”010110111000…這樣由0和1兩個數字組成的二進制數字,這是因為計算機的底層硬件實現就是用電路的開和閉兩種狀態來表示0和1兩個數字的。因此,計算機只可以直接存儲和處理二進制數字。

2.

為了在計算機上也能表示、存儲和處理像文字、符號等等之類的字符,就必須將這些字符轉換成二進制數字。

當然,肯定不是我們想怎么轉換就怎么轉換,否則就會造成同一段二進制數字在不同計算機上顯示出來的字符不一樣的情況,因此必須得定一個統一的、標准的轉換規則。

 

二、EBCDIC碼與ASCII碼

1.

於是最開始出現了EBCDIC(Extended Binary Coded Decimal Interchange Code擴展二進制編碼的十進制交換碼)編碼標准。EBCDIC碼是由國際商用機器公司(IBM)為大型機操作系統而開發設計的,於1964年推出。

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

因此,在后來IBM的個人計算機和工作站操作系統中並沒有采用EBCDIC碼,而是采用了晚於EBCDIC碼推出、且后來成為了英文字符編碼工業標准的ASCII編碼方案。

EBCDIC編碼表

2.

ASCII碼(American Standard Code for Information Interchange美國信息交換標准碼),由美國國家標准學會ANSI(American National Standard Institute)於1968年正式制定。后又於1972年被ISO/IEC采用,制定為ISO/IEC 646標准(ISO,即國際標准化組織International Standardization Organization,成立於1946年;IEC,即國際電工技術委員會International Electrotechnical Commission,成立於1906年;ISO/IEC往往用來表示由這兩大國際組織聯合制定的標准)。

由於ASCII碼要晚於EBCDIC碼出現(網上也有文章說是ASCII碼要早於EBCDIC碼開始設計,但1968年ASCII碼才正式確定為標准),ASCII碼的編碼方式參照了EBCDIC碼,並吸取了其經驗教訓,將英文字母進行了連續排列,這方便了程序處理。

3.

ASCII編碼方案雖然不是最早出現的字符編碼方案,但卻是最基礎、最重要、應用最廣泛的字符編碼方案。

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

而像EBCDIC這樣與ASCII完全不兼容的編碼方案,基本上處於已淘汰或將要淘汰的境地。

 

三、ASCII字符編碼方案介紹

1.

ASCII碼使用七個二進制數字(bit比特、位)來表示一個字符,總共表示128個字符(2^7 = 128,二進制編碼為0000 0000 ~ 0111 1111,對應的十進制就是0~127)。

由於個人計算機普遍采用8位一個字節來進行存取與處理,因此剩下最高位的那1比特一般為0,但有時也被用作一些通訊系統的奇偶校驗位。


  ASCII編碼表

2.

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

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

2)32~126:可顯示可打印字符(其中32為可顯示但不可打印的空格字符),48~57為0-9的阿拉伯數字,65~90為26個大寫英文字母,97~122為26個小寫英文字母,其余的是一些標點符號、運算符號等。

3)127:控制字符DEL。

3.

這時候的字符編解碼非常簡單,比如若要將字符序列編碼為二進制流寫入存儲設備,只需要將該字符序列里的各個字符在ASCII字符集中的字符編號(即碼點編號),直接以一個二進制字節寫入存儲設備即可,字符編號就是字符編碼,中間不需要經過特別的編碼算法進行字符編號到字符編碼的轉換計算,更不存在所謂碼元序列到字節序列的轉換。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM