ASCII碼的理解


一、ASCII碼表

ASCII(American Standard Code for Information Interchange,美國標准信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言。它是現今最通用的單字節編碼系統,並等同於國際標准ISO/IEC 646。

 

ASCII 碼使用指定的 7 位或 8 位二進制數組合來表示 128 或 256 種可能的字符。標准 ASCII 碼也叫基礎ASCII碼,使用 7 位二進制數來表示所有的大寫和小寫字母,數字 0 到 9、標點符號, 以及在美式英語中使用的特殊控制字符。其中:

  0~31及127(共33個)是控制字符或通信專用字符(其余為可顯示字符),如控制符:LF(換行)、CR(回車)、FF(換頁)、DEL(刪除)、BS(退格)、BEL(振鈴)等;通信專用字符:SOH(文頭)、EOT(文尾)、ACK(確認)等;ASCII值為 8、9、10 和 13 分別轉換為退格、制表、換行和回車字符。它們並沒有特定的圖形顯示,但會依不同的應用程序,而對文本顯示有不同的影響。

  32~126(共95個)是字符(32sp是空格),其中48~57為0到9十個阿拉伯數字;

  65~90為26個大寫英文字母,97~122號為26個小寫英文字母,其余為一些標點符號、運算符號等。

  同時還要注意,在標准ASCII中,其最高位(b7)用作奇偶校驗位。所謂奇偶校驗,是指在代碼傳送過程中用來檢驗是否出現錯誤的一種方法,一般分奇校驗和偶校驗兩種。奇校驗規定:正確的代碼一個字節中1的個數必須是奇數,若非奇數,則在最高位b7添1;偶校驗規定:正確的代碼一個字節中1的個數必須是偶數,若非偶數,則在最高位b7添1。

  后128個稱為擴展ASCII碼,目前許多基於x86的系統都支持使用擴展(或“高”)ASCII。擴展 ASCII 碼允許將每個字符的第 8 位用於確定附加的 128 個特殊符號字符、外來語字母和圖形符號。

在計算機中,所有的數據在存儲和運算時都要使用二進制數表示(因為計算機用高電平和低電平分別表示1和0),例如,象a、b、c、d這樣的52個字母(包括大寫)、以及0、1等數字還有一些常用的符號(例如*、#、@等)在計算機中存儲時也要使用二進制數來表示,而具體用哪些二進制數字表示哪個符號,當然每個人都可以約定自己的一套(這就叫編碼),而大家如果要想互相通信而不造成混亂,那么大家就必須使用相同的編碼規則,於是美國有關的標准化組織就出台了所謂的ASCII編碼,統一規定了上述常用符號用哪些二進制數來表示。

  美國標准信息交換代碼是由美國國家標准學會(American National Standard Institute , ANSI )制定的,標准的單字節字符編碼方案,用於基於文本的數據。起始於50年代后期,在1967年定案。它最初是美國國家標准,供不同計算機在相互通信時用作共同遵守的西文字符編碼標准,它已被國際標准化組織(International Organization for Standardization, ISO)定為國際標准,稱為ISO 646標准。適用於所有拉丁文字字母。

 

127個字符和轉義字符如圖:

 

 

ASCII碼表控制符的詳細解釋參考:http://c.biancheng.net/c/ascii/

鍵盤常用ASCII碼:http://www.asciima.com/ascii/1.html

擴展ASCII打印字符

擴展的 ASCII 字符滿足了對更多字符的需求。擴展的 ASCII 包含 ASCII 中已有的 128 個字符(數字 0–32 顯示在下圖中),又增加了 128 個字符,總共是 256 個。即使有了這些更多的字符,許多語言還是包含無法壓縮到 256 個字符中的符號。因此,出現了一些 ASCII 的變體來囊括地區性字符和符號。例如,許多軟件程序把 ASCII 表(又稱作 ISO 8859-1)用於北美、西歐、澳大利亞和非洲的語言。

 

二、ASCII碼的算法

標准 ASCII 碼使用 7 位二進制數來表示所有的大寫和小寫字母,數字 0 到 9、標點符號,以及在美式英語中使用的特殊控制字符。目前許多基於 x86 的系統都支持使用擴展(或“高”)ASCII。擴展 ASCII 碼允許將每個字符的第 8 位用於確定附加的 128 個特殊符號字符、外來語字母和圖形符號。也就是說擴展的ASCII碼第8位是1,對應128-255.

 

常見ASCII碼的大小規則:0~9<A~Z<a~z。
1)數字比字母要小。如 “7”<“F”;
2)數字0比數字9要小,並按0到9順序遞增。如 “3”<“8” ;
3)字母A比字母Z要小,並按A到Z順序遞增。如“A”<“Z” ;
4)同個字母的大寫字母比小寫字母要小32。如“A”<“a” 。
幾個常見字母的ASCII碼大小: “A”為65;“a”為97;“0”為 48

 

在英語中,用128個符號編碼便可以表示所有,但是用來表示其他語言,128個符號是不夠的。比如,在法語中,字母上方有注音符號,它就無法用 ASCII 碼表示。於是,一些歐洲國家就決定,利用字節中閑置的最高位編入新的符號。比如,法語中的é的編碼為130(二進制10000010)。這樣一來,這些歐洲國家使用的編碼體系,可以表示最多256個符號 。
但是,這里又出現了新的問題。不同的國家有不同的字母,因此,哪怕它們都使用256個符號的編碼方式,代表的字母卻不一樣。比如,130在法語編碼中代表了é,在希伯來語編碼中卻代表了字母Gimel (ג),在俄語編碼中又會代表另一個符號。但是不管怎樣,所有這些編碼方式中,0--127表示的符號是一樣的,不一樣的只是128--255的這一段 。
至於亞洲國家的文字,使用的符號就更多了,漢字就多達10萬左右。一個字節只能表示256種符號,肯定是不夠的,就必須使用多個字節表達一個符號。比如,簡體中文常見的編碼方式是 GB2312,使用兩個字節表示一個漢字,所以理論上最多可以表示 256 x 256 = 65536 個符號。


免責聲明!

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



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