ASCII碼詳解

ASCII簡介

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 個特殊符號字符、外來語字母和圖形符號。

ASCII產生

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

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

ASCII國際問題

  ASCII是美國標準,所以它不能良好滿足其它講英語國家的需要。例如英國的英鎊符號(£)在哪裏?拉丁語字母表重音符號。使用斯拉夫字母表的希臘語、希伯來語、阿拉伯語和俄語。漢字系統的中國象形漢字,日本和朝鮮。

  1967年,國際標準化組織(ISO:International Standards Organization)推薦一個ASCII的變種,代碼0x40、0x5B、0x5C、0x5D、0x7B、0x7C和0x7D「爲國家使用保留」,而代碼0x5E、0x60和0x7E標爲「當國內要求的特殊字符需要8、9或10個空間位置時,可用於其它圖形符號」。這顯然不是一個最佳的國際解決方案。因爲這並不能保證一致性。但這卻顯示了人們如何想盡辦法爲不同的語言來編碼的。

ASCII碼的算法

  A在ASCII中定義爲01000001,也就是十進制65,有了這個標準後,當我們輸入A時,計算機就可以通過ASCII碼知道輸入的字符的二進制編碼是01000001。而沒有這樣的標準,我們就必須自己想辦法告訴計算機我們輸入了一個A;沒有這樣的標準,我們在別的機器上就需要重新編碼以告訴計算機我們要輸入A。ASCII碼指的不是十進制,是二進制。只是用十進制表示習慣一點罷了,比如在ascii碼中,A的二進制編碼爲01000001,如果用十進制表示是65,用十六進制表示就是41H。

  在ASCII碼錶中,只包括了一些字符、數字、標點符號的信息表示,這主要是因爲計算機是美國發明的,在英文下面,我們使用ASCII表示就足夠了!但是在漢字輸入下面,用ASCII碼就不能表示了,而漢字只是中國的通用表示,所以如果我們要在計算機中輸入漢字,就必須有一個像ascii碼的標準來表示每一個漢字,這就是中國的漢字國標碼,它定義了漢字在計算機中的一個表示標準。通過這個標準,但我們輸入漢字的時候,我們的輸入碼就轉換爲區位碼,通過唯一的區位碼得到這個漢字的字形碼並顯示出來。當然漢字的區位碼在計算機中也是用二進制表示的!

漢字編碼

   0-127 是 7位ASCII 碼的範圍,是國際標準。

   至於漢字,不同的字符集用的ascii 碼的範圍也不一樣,常用的漢字字符集有GB2312-80,GBK,Big5,unicode 等。下面我重點說一說最常用的GB_2312 的字符集。

   GB_2312 字符集是目前最常用的漢字編碼標準,windows 95/98/2000 中使用的 GBK字符集 就包含了GB2312,或者說和GB2312 兼容,GB_2312 字符集包含了 6763個的 簡體漢字,和682 個標準中文符號。在這個標準中,每個漢字用2個字節來表示,每個字節的ascii碼爲 161-254 (16 進制A1 - FE),第一個字節 對應於 區碼的1-94 區,第二個字節 對應於位碼的1-94 位。

   161-254 其實很好記憶,大家知道英文字符中,可打印的字符範圍爲33-126。將 這對 數加上128(或者說最高位置1),就得到漢字使用的字符的範圍。

 

ASCII碼錶大致可以分三部分組成:

一:ASCII非打印控制字符

二:ASCII打印字符

三:擴展ASCII打印字符

 

一:ASCII非打印控制字符

ASCII表上的數字0–31分配給了控制字符,用於控制像打印機等一些外圍設備。例如,12代表換頁/新頁功能。此命令指示打印機跳到下一頁的開頭。(參詳ASCII碼錶中0-31)

二:ASCII打印字符

數字 32–126 分配給了能在鍵盤上找到的字符,當您查看或打印文檔時就會出現。數字127代表 DELETE 命令。(參詳ASCII碼錶中32-127)

 

三:擴展ASCII打印字符

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