産生
在計算機中,所有的數據在存儲和運算時都要使用二進制數表示(因為計算機用高電平和低電平分别表示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碼使用指定的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個)是字符(32是空格),其中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~9比字母要小。如"7"<"F";
2)數字0比數字9要小,并按0到9順序遞增。如"3"<"8"
3)字母A比字母Z要小,并按A到Z順序遞增。如"A"<"Z"
4)同個字母的大寫字母比小寫字母要小。如"A"<"a"。
記住幾個常見字母的ASCII碼大小:
“換行LF”為0x0A;“回車CR”為0x0D;空格為0x20;"0"為0x30;"A"為0x41;"a"為0x61。
另外還有128-255的ASCII字符。
查詢ASCII技巧,方便查詢ASCII碼對應的字符:新建一個文本文檔,按住ALT+要查詢的碼值(注意,這裡是十進制),松開即可顯示出對應字符。例如:按住ALT+97,則會顯示出'a'。
國際問題
ASCII是美國标準,所以它不能良好滿足其它講英語國家的需要。例如英國的英鎊符号(£)在哪裡?
拉丁語字母表重音符号
使用斯拉夫字母表的希臘語、希伯來語、阿拉伯語和俄語。
漢字系統的中國象形漢字,日本和朝鮮。
1967年,國際标準化組織(ISO:International Standards Organization)推薦一個ASCII的變種,
代碼0x40、0x5B、0x5C、0x5D、0x7B、0x7C和0x7D“為國家使用保留”,而代碼0x5E、0x60和0x7E标為
“當國内要求的特殊字符需要8、9或10個空間位置時,可用于其它圖形符号”。這顯然不是一個最佳的國際解決方案,
因為這并不能保證一緻性。但這卻顯示了人們如何想盡辦法為不同的語言來編碼的。
擴展ASCII
1981年IBM PC ROM256個字符的字符集,即IBM擴展字符集
1985年11Windows字符集被稱作“ANSI字符集”,遵循了ANSI草案和ISO标準(ANSI/ISO8859-1-1987,簡“Latin 1”。ANSI字符集的最初版本:
1987年4月代碼頁437,字符的映像代碼,出現在MS-DOS3.3
擴展ASCII字符是從128到255(0x80-0xff)的字符。
擴展ASCII不再是國際标準。
打印字符
擴展的ASCII字符滿足了對更多字符的需求。擴展的ASCII包含ASCII中已有的128個字符(數字0–32顯示在下圖中),又增加了128個字符,總共是256個。即使有了這些更多的字符,許多語言還是包含無法壓縮到256個字符中的符号。因此,出現了一些ASCII的變體來囊括地區性字符和符号。例如,許多軟件程序把ASCII表(又稱作ISO8859-1)用于北美、西歐、澳大利亞和非洲的語言。
雙字節
雙字節字符集(DBCS:double-byte character set),解決中國、日本和韓國的象形文字符和ASCII的某種兼容性。
DBCS從256代碼開始,就像ASCII一樣。與任何行為良好的代碼頁一樣,最初的128個代碼是ASCII。
然而,較高的128個代碼中的某些總是跟随着第二個字節。
這兩個字節一起(稱作首字節和跟随字節)定義一個字符,通常是一個複雜的象形文字。
虛拟ASCII值
ESC鍵VK_ESCAPE (27)
回車鍵:VK_RETURN (13)
TAB鍵:VK_TAB (9)
Caps Lock鍵:VK_CAPITAL (20)
Shift鍵:VK_SHIFT (16)
Ctrl鍵:VK_CONTROL (17)
Alt鍵:VK_MENU (18)
空格鍵:VK_SPACE (32)
退格鍵:VK_BACK (8)
左徽标鍵:VK_LWIN (91)
右徽标鍵:VK_RWIN (92)
鼠标右鍵快捷鍵:VK_APPS (93)
Insert鍵:VK_INSERT (45)
Home鍵:VK_HOME (36)
Page Up:VK_PRIOR (33)
PageDown:VK_NEXT (34)
End鍵:VK_END (35)
Delete鍵:VK_DELETE (46)
方向鍵(←):VK_LEFT (37)
方向鍵(↑):VK_UP (38)
方向鍵(→):VK_RIGHT (39)
方向鍵(↓):VK_DOWN (40)
F1鍵:VK_F1 (112)
F2鍵:VK_F2 (113)
F3鍵:VK_F3 (114)
F4鍵:VK_F4 (115)
F5鍵:VK_F5 (116)
F6鍵:VK_F6 (117)
F7鍵:VK_F7 (118)
F8鍵:VK_F8 (119)
F9鍵:VK_F9 (120)
F10鍵:VK_F10 (121)
F11鍵:VK_F11 (122)
F12鍵:VK_F12 (123)
Num Lock鍵:VK_NUMLOCK (144)
小鍵盤0:VK_NUMPAD0 (96)
小鍵盤1:VK_NUMPAD1 (97)
小鍵盤2:VK_NUMPAD2 (98)
小鍵盤3:VK_NUMPAD3 (99)
小鍵盤4:VK_NUMPAD4 (100)
小鍵盤5:VK_NUMPAD5 (101)
小鍵盤6:VK_NUMPAD6 (102)
小鍵盤7:VK_NUMPAD7 (103)
小鍵盤8:VK_NUMPAD8 (104)
小鍵盤9:VK_NUMPAD9 (105)
小鍵盤。:VK_DECIMAL (110)
小鍵盤*:VK_MULTIPLY (106)
小鍵盤+:VK_ADD (107)
小鍵盤-:VK_SUBTRACT (109)
小鍵盤/:VK_DIVIDE (111)
Pause Break鍵:VK_PAUSE (19)
Scroll Lock鍵:VK_SCROLL (145)
編程相關
Pascal
取得ASCII碼:Ord(ch)
得到對應字符:Chr(n)
Visual Basic
取得ASCII碼:Asc(ch)
得到對應字符:Chr(n)
PC LOGO編程
取得ASCII碼:asc"(某個字符,如大寫的A)(輸出答案:65)。
漢字編碼
0-127是7位ASCII碼的範圍,是國際标準。
至于漢字,不同的字符集用的ascii碼的範圍也不一樣,常用的漢字字符集有GB2312-80,GBK,
Big5,unicode等。下面我重點說一說最常用的GB_2312的字符集。
GB_2312字符集是目前最常用的漢字編碼标準,windows95/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),就得到漢字使用的字符的範圍。
//GB18030的規範是漢字第一個字節在0x81-0xFE之間,第二個字節位于區間0x40-0x7E以及0x80-0xFE。每個字節轉化為整數大于128。
if((char_temp>=0x81)&&(char_temp<=0xFE))
{
if(*len
{
*len+=1;
*p_temp++=char_temp;
_putch(char_temp);
x++;
}
}
}。
非打印控制字符
ASCII 表上的數字 0–31 分配給了控制字符,用于控制像打印機等一些外圍設備。例如,12 代表換頁/新頁功能。此命令指示打印機跳到下一頁的開頭。
碼表圖
(0-127不包含擴展部分)
國際問題
ASCII是美國标準,所以它不能良好滿足其它講英語國家的需要。例如英國的英鎊符号(£)在哪裡?
拉丁語字母表重音符号。
使用斯拉夫字母表的希臘語、希伯來語、阿拉伯語和俄語。
漢字系統的中國象形漢字,日本和朝鮮。
1967年,國際标準化組織(ISO:International Standards Organization)推薦一個ASCII的變種,
代碼0x40、0x5B、0x5C、0x5D、0x7B、0x7C和0x7D“為國家使用保留”,而代碼0x5E、0x60和0x7E标為
“當國内要求的特殊字符需要8、9或10個空間位置時,可用于其它圖形符号”。這顯然不是一個最佳的國際解決方案。
因為這并不能保證一緻性。但這卻顯示了人們如何想盡辦法為不同的語言來編碼的。