ASCII (American Standard Code for Information Interchange),即美國信息交換標準代碼,是基于拉丁字母的一套電腦編碼系統。ASCII碼是一種西文機內碼,有7位ASCII碼和8位ASCII碼兩種,它是目前最通用的信息交換標準,主要用于顯示現代英語和其他西歐語言,以及用于在不同計算機硬件和軟件系統中實現數據傳輸標準化,在大多數的小型機和全部的personal computer都使用此碼。它已被國際標準化組織(ISO)定為國際標準,稱為ISO 646標準。
ASCII第一次以規范標準的類型發表是在1967年,最后一次更新則是在1986年,迄今為止共收錄了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標準。適用于所有拉丁文字字母。
表述方式
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個特殊符號字符、外來語字母和圖形符號。
標準I表
大小規則
常見ASCII碼的大小規則:0~9 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。 在英語中,用128個符號編碼便可以表示所有,但是用來表示其他語言,128個符號是不夠的。比如,在法語中,字母上方有注音符號,它就無法用 ASCII 碼表示。于是,一些歐洲國家就決定,利用字節中閑置的最高位編入新的符號。比如,法語中的é的編碼為130(二進制10000010)。這樣一來,這些歐洲國家使用的編碼體系,可以表示最多256個符號??。 但是,這里又出現了新的問題。不同的國家有不同的字母,因此,哪怕它們都使用256個符號的編碼方式,代表的字母卻不一樣。比如,130在法語編碼中代表了é,在希伯來語編碼中卻代表了字母Gimel (?),在俄語編碼中又會代表另一個符號。但是不管怎樣,所有這些編碼方式中,0--127表示的符號是一樣的,不一樣的只是128--255的這一段??。 至于亞洲國家的文字,使用的符號就更多了,漢字就多達10萬左右。一個字節只能表示256種符號,肯定是不夠的,就必須使用多個字節表達一個符號。比如,簡體中文常見的編碼方式是?GB2312,使用兩個字節表示一個漢字,所以理論上最多可以表示 256 x 256 = 65536 個符號??。 ASCII是美國標準,所以它不能良好滿足其它講英語國家的需要。例如英國的英鎊符號(£)在哪里? 拉丁語字母控股重音符號。 1967年,國際標準化組織(ISO:InternationalStandardsOrganization)推薦一個ASCII的變種, 代碼0x40、0x5B、0x5C、0x5D、0x7B、0x7C和0x7D“為國家使用保留”,而代碼0x5E、0x60和0x7E標為“當國內要求的特殊字符需要8、9或10個空間位置時,可用于其它圖形符號”。這顯然不是一個最佳的國際解決方案。 因為這并不能保證一致性。但這卻顯示了人們如何想盡辦法為不同的語言來編碼的。 1981年IBM PC ROM256個字符的字符集,即IBM擴展字符集。 1985年11 Windows字符集被稱作“ANSI字符集”,遵循了ANSI草案和ISO標準(ANSI/ISO8859-1-1987,簡“Latin 1”。ANSI字符集的最初版本: 1987年4月代碼頁437,字符的映像代碼,出現在MS-DOS3.3。 擴展ASCII 字符是從128 到255(0x80-0xff)的字符。 擴展ASCII不再是國際標準。 雙字節字符集(DBCS:double-bytecharacterset),解決中國、日本和韓國的象形文字符和ASCII的某種兼容性。 DBCS從256代碼開始,就像ASCII一樣。與任何行為良好的代碼頁一樣,最初的128個代碼是ASCII。 然而,較高的128個代碼中的某些總是跟隨著第二個字節。 這兩個字節一起(稱作首字節和跟隨字節)定義一個字符,通常是一個復雜的象形文字。 為了解決中國、日本和韓國的象形文字符和ASCII的某種兼容性,出現了雙字節字符集(DBCS:double-byte character set)。DBCS從 第256 代碼開始,就像ASCII一樣,最初的128個代碼是ASCII。然而,較高的128個代碼中的某些總是跟隨著第二個字節。這兩個字節一起(稱作首字節和跟隨字節)定義一個字符,通常是一個復雜的象形文字??。 ESC鍵VK_ESCAPE(27) 回車鍵:VK_RETURN(13) TAB鍵:VK_TAB(9) CapsLock鍵: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) PageUp: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) 2012年世界一級方程式錦標賽鍵: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) NumLock鍵: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) PauseBreak鍵:VK_PAUSE(19) ScrollLock鍵:VK_SCROLL(145) Pascal 取得ASCII碼:Ord(ch) 得到對應字符:Chr(n) 取得ASCII碼:Asc(ch) 得到對應字符:Chr(n) PCLOGO編程 取得ASCII碼:asc(某個字符,如大寫的A)(輸出答案:65) 在ascii中定義為01000001,也就是十進制65,有了這個標準后,當我們輸入A時,計算機就可以通過ascii碼知道輸入的字符的二進制編碼是01000001。而沒有這樣的標準,我們就必須自己想辦法告訴計算機我們輸入了一個A;沒有這樣的標準,我們在別的機器上就需要重新編碼以告訴計算機我們要輸入A。ascii碼指的不是十進制,是二進制。只是用十進制表示習慣一點罷了,比如在ascii碼中,A的二進制編碼為01000001,如果用十進制表示是65,用十六進制表示就是41H。 在ascii碼表中,只包括了一些字符、數字、標點符號的信息表示,這主要是因為計算機是美國發明的,在英文下面,我們使用ascii表示就足夠了!但是在漢字輸入下面,用ascii碼就不能表示了,而漢字只是中國的通用表示,所以如果我們要在計算機中輸入漢字,就必須有一個像ascii碼的標準來表示每一個漢字,這就是中國的漢字國標碼,它定義了漢字在計算機中的一個表示標準。通過這個標準,但我們輸入漢字的時候,我們的輸入碼就轉換為區位碼,通過唯一的區位碼得到這個漢字的字形碼并顯示出來。當然漢字的區位碼在計算機中也是用二進制表示的。 一、二進制數轉換為十進制數 二進制數第0位的權值是2的0次方,第1位的權值是2的1次方…… 所以,設有一個二進制數:0110 0100,轉換為10進制為: 下面是豎式: 0110 0100 換算成 十進制 第0位 0 * 20 = 0 第1位 0 * 21 = 0 第2位 1 * 22 = 4 第3位 0 * 23 = 0 第4位 0 * 24 = 0 第5位 1 * 25 = 32 第6位 1 * 26 = 64 第7位 0 * 27 = 0 用橫式計算為: 0 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100 0乘以多少都是0,所以我們也可以直接跳過值為0的位: 1 * 22 + 1 * 23 + 1 * 25 + 1 * 26 = 100 二、八進制數轉換為十進制數 八進制就是逢8進1。 八進制數采用 0~7這八數來表達一個數。 八進制數第0位的權值為8的0次方,第1位權值為8的1次方,第2位權值為8的2次方…… 所以,設有一個八進制數:1507,轉換為十進制為: 用豎式表示: 1507換算成十進制。 第0位 7 * 80 = 7 第1位 0 * 81 = 0 第2位 5 * 82 = 320 第3位 1 * 83 = 512 同樣,我們也可以用橫式直接計算: 7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839 結果是,八進制數 1507 轉換成十進制數為 839 八進制數的表達方法 C,C++中,如何表達一個八進制數呢?如果這個數是 876,我們可以斷定它不是八進制數,因為八進制數中不可能出7以上的阿拉伯數字。但如果這個數是123、是567,或12345670,那么它是八進制數還是10進制數,都有可能。 所以,C,C++規定,一個數如果要指明它采用八進制,必須在它前面加上一個0,如:123是十進制,但0123則表示采用八進制。這就是八進制數在C、C++中的表達方法。 由于C和C++都沒有提供二進制數的表達方法,所以,這里所學的八進制是我們學習的,CtC++語言的數值表達的第二種進制法。 現在,對于同樣一個數,比如是100,我們在代碼中可以用平常的10進制表達,例如在變量初始化時: int a = 100; 我們也可以這樣寫: int a = 0144; //0144是八進制的100;一個10進制數如何轉成8進制,我們后面會學到。 千萬記住,用八進制表達時,你不能少了最前的那個0。否則計算機會通通當成10進制。不過,有一個地方使用八進制數時,卻不能使用加0,那就是我們前面學的用于表達字符的“轉義符”表達法。 八進制數在轉義符中的使用 我們學過用一個轉義符'\'加上一個特殊字母來表示某個字符的方法,如:'\n'表示換行(line),而'\t'表示Tab字符,'\''則表示單引號。今天我們又學習了一種使用轉義符的方法:轉義符'\'后面接一個八進制數,用于表示ASCII碼等于該值的字符。 比如,查一下第5章中的ASCII碼表,我們找到問號字符(?)的ASCII值是63,那么我們可以把它轉換為八進值:77,然后用 '\77'來表示'?'。由于是八進制,所以本應寫成 '\077',但因為C,C++規定不允許使用斜杠加10進制數來表示字符,所以這里的0可以不寫。 事實上我們很少在實際編程中非要用轉義符加八進制數來表示一個字符,所以,6。2。4小節的內容,大家僅僅了解就行。 十六進制數轉換成十進制數 2進制,用兩個阿拉伯數字:0、1; 8進制,用八個阿拉伯數字:0、1、2、3、4、5、6、7; 10進制,用十個阿拉伯數字:0到9; 16進制,用十六個阿拉伯數字……等等,阿拉伯人或說是印度人,只發明了10個數字啊? 16進制就是逢16進1,但我們只有0~9這十個數字,所以我們用A,B,C,D,E,F這五個字母來分別表示10,11,12,13,14,15。字母不區分大小寫。 十六進制數的第0位的權值為16的0次方,第1位的權值為16的1次方,第2位的權值為16的2次方 所以,在第N(N從0開始)位上,如果是是數 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小為 X * 16的N次方。 假設有一個十六進數 2AF5,那么如何換算成10進制呢 用豎式計算: 2AF5換算成10進制: 第0位: 5 * 160 = 5 第1位: F * 161 = 240 第2位: A * 162 = 2560 第3位: 2 * 163 = 8192 直接計算就是: 5 * 160 + F * 161 + A * 162 + 2 * 163 = 10997 (別忘了,在上面的計算中,A表示10,而F表示15) 現在可以看出,所有進制換算成10進制,關鍵在于各自的權值不同。 假設有人問你,十進數 1234 為什么是 一千二百三十四?你盡可以給他這么一個算式: 1234 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100 十六進制數的表達方法 如果不使用特殊的書寫形式,16進制數也會和10進制相混。隨便一個數:9876,就看不出它是16進制或10進制。 C,C++規定,16進制數必須以 0x開頭。比如 0x1表示一個16進制數。而1則表示一個十進制。另外如:0xff,0xFF,0X102A,等等。其中的x也也不區分大小寫。(注意:0x中的0是數字0,而不是字母O) 以下是一些用法示例: int a = 0x100F; int b = 0x70 + a; 至此,我們學完了所有進制:10進制,8進制,16進制數的表達方式。最后一點很重要,C/C++中,10進制數有正負之分,比如12表示正12,而-12表示負12,;但8進制和16進制只能用達無符號的正整數,如果你在代碼中里:-078,或者寫:-0xF2,C,C++并不把它當成一個負數。 十六進制數在轉義符中的使用 轉義符也可以接一個16進制數來表示一個字符。如在6。2。4小節中說的 '?' 字符,可以有以下表達方式: '?' //直接輸入字符 '\77' //用八進制,此時可以省略開頭的0 '\0x3F' //用十六進制 同樣,這一小節只用于了解。除了空字符用八進制數 '\0' 表示以外,我們很少用后兩種方法表示一個字符。 三、十進制數轉換到二、八、十六進制數 進制數轉換為2進制數 給你一個十進制,比如:6,如果將它轉換成二進制數呢? 10進制數轉換成二進制數,這是一個連續除2的過程: 把要轉換的數,除以2,得到商和余數, 將商繼續除以2,直到商為0。最后將所有余數倒序排列,得到數就是轉換結果。 聽起來有些糊涂?我們結合例子來說明。比如要轉換6為二進制數。 “把要轉換的數,除以2,得到商和余數”。 那么: 要轉換的數是6, 6 ÷ 2,得到商是3,余數是0。 (不要告訴我你不會計算6÷3!) “將商繼續除以2,直到商為0……” 現在商是3,還不是0,所以繼續除以2。 那就: 3 ÷ 2,得到商是1,余數是1。 “將商繼續除以2,直到商為0……” 現在商是1,還不是0,所以繼續除以2。 那就: 1 ÷ 2,得到商是0,余數是1 (拿筆紙算一下,1÷2是不是商0余1!) “將商繼續除以2,直到商為0……最后將所有余數倒序排列” 好極!現在商已經是0。 我們三次計算依次得到余數分別是:0、1、1,將所有余數倒序排列,那就是:110了! 6轉換成二進制,結果是110。 把上面的一段改成用表格來表示,則為: 被除數 計算過程 商 余數 6 6/2 3 0 3 3/2 1 1 1 1/2 0 1 (在計算機中,÷用 / 來表示) 如果是在考試時,我們要畫這樣表還是有點費時間,所更常見的換算過程是使用下圖的連除: (圖:1) 請大家對照圖,表,及文字說明,并且自已拿筆計算一遍如何將6轉換為二進制數。 說了半天,我們的轉換結果對嗎?二進制數110是6嗎?你已經學會如何將二進制數轉換成10進制數了,所以請現在就計算一下110換成10進制是否就是6。 6。3。2 10進制數轉換為8、16進制數 非常開心,10進制數轉換成8進制的方法,和轉換為2進制的方法類似,惟一變化:除數由2變成8。 來看一個例子,如何將十進制數120轉換成八進制數。 用表格表示: 被除數 計算過程 商 余數 120 120/8 15 0 15 15/8 1 7 1 1/8 0 1 120轉換為8進制,結果為:170。 非常非常開心,10進制數轉換成16進制的方法,和轉換為2進制的方法類似,惟一變化:除數由2變成16。 同樣是120,轉換成16進制則為: 被除數 計算過程 商 余數 120 120/16 7 8 7 7/16 0 7 120轉換為16進制,結果為:78。 請拿筆紙,采用(圖:1)的形式,演算上面兩個表的過程。 四、十六進制數互相轉換 二進制和十六進制的互相轉換比較重要。不過這二者的轉換卻不用計算,每個C,C++程序員都能做到看見二進制數,直接就能轉換為十六進制數,反之亦然。 我們也一樣,只要學完這一小節,就能做到。 首先我們來看一個二進制數:1111,它是多少呢? 你可能還要這樣計算:1 * 20 + 1 * 21 + 1 * 22 + 1 * 23 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。 然而,由于1111才4位,所以我們必須直接記住它每一位的權值,并且是從高位往低位記,:8、4、2、1。即,最高位的權值為23 = 8,然后依次是 22 = 4,21=2, 20 = 1。 記住8421,對于任意一個4位的二進制數,我們都可以很快算出它對應的10進制值。 下面列出四位二進制數 xxxx 所有可能的值(中間略過部分) 僅4位的2進制數 快速計算方法 十進制值 十六進值 1111 = 8 + 4 + 2 + 1 = 15 F 1110 = 8 + 4 + 2 + 0 = 14 E 1101 = 8 + 4 + 0 + 1 = 13 D 1100 = 8 + 4 + 0 + 0 = 12 C 1011 = 8 + 4 + 0 + 1 = 11 B 1010 = 8 + 0 + 2 + 0 = 10 A 1001 = 8 + 0 + 0 + 1 = 10 9 。。。。 0001 = 0 + 0 + 0 + 1 = 1 1 0000 = 0 + 0 + 0 + 0 = 0 0 二進制數要轉換為十六進制,就是以4位一段,分別轉換為十六進制。 如(上行為二制數,下面為對應的十六進制): 1111 1101 , 1010 0101 , 1001 1011 F D , A 5 , 9 B 反過來,當我們看到 FD時,如何迅速將它轉換為二進制數呢? 先轉換F: 看到F,我們需知道它是15(可能你還不熟悉A~F這五個數),然后15如何用8421湊呢?應該是8 + 4 + 2 + 1,所以四位全為1 :1111。 接著轉換 D: 看到D,知道它是13,13如何用8421湊呢?應該是:8 + 4 + 1,即:1101。 所以,FD轉換為二進制數,為: 1111 1101 由于十六進制轉換成二進制相當直接,所以,我們需要將一個十進制數轉換成2進制數時,也可以先轉換成16進制,然后再轉換成2進制。 比如,十進制數 1234轉換成二制數,如果要一直除以2,直接得到2進制數,需要計算較多次數。所以我們可以先除以16,得到16進制數: 被除數 計算過程 商 余數 1234 1234/16 77 2 77 77/16 4 13 (D) 4 4/16 0 4 結果16進制為: 0x4D2 然后我們可直接寫出0x4D2的二進制形式: 0100 1101 0010。 其中對映關系為: 0100 -- 4 1101 -- D 0010 -- 2 同樣,如果一個二進制數很長,我們需要將它轉換成10進制數時,除了前面學過的方法是,我們還可以先將這個二進制轉換成16進制,然后再轉換為10進制。 下面舉例一個int類型的二進制數: 01101101 11100101 10101111 00011011 我們按四位一組轉換為16進制: 6D E5 AF 1B 目前的文字編碼標準主要有 ASCII、GB2312、GBK、Unicode等。ASCII 編碼是最簡單的西文編碼方案。GB2312、GBK、GB18030 是漢字字符編碼方案的國家標準。ISO/IEC 10646 和 Unicode 都是全球字符編碼的國際標準??。下面對與漢字相關的編碼方案GB2312,GBK與GB18030做簡要的分析。 GB2312-80 標準 GB2312-80 是 1980 年制定的中國漢字編碼國家標準。共收錄 7445 個字符,其中漢字 6763 個。GB2312 兼容標準 ASCII碼,采用擴展 ASCII 碼的編碼空間進行編碼,一個漢字占用兩個字節,每個字節的最高位為 1。具體辦法是:收集了 7445 個字符組成 94*94 的方陣,每一行稱為一個“區”,每一列稱為一個“位”,區號位號的范圍均為 01-94,區號和位號組成的代碼稱為“區位碼”。區位輸入法就是通過輸入區位碼實現漢字輸入的。將區號和位號分別加上 20H,得到的 4 位十六進制整數稱為國標碼,編碼范圍為 0x2121~0x7E7E。為了兼容標準 ASCII 碼,給國標碼的每個字節加 80H,形成的編碼稱為機內碼,簡稱內碼,是漢字在機器中實際的存儲代碼GB2312-80 標準的內碼范圍是 0xA1A1~0xFEFE??。 GBK 編碼標準 《漢字內碼擴展規范》(GBK) 于1995年制定,兼容GB2312、GB13000-1、BIG5 編碼中的所有漢字,使用雙字節編碼,編碼空間為 0x8140~0xFEFE,共有 23940 個碼位,其中 GBK1 區和 GBK2 區也是 GB2312 的編碼范圍。收錄了 21003 個漢字。GBK向下與 GB 2312 編碼兼容,向上支持 ISO 10646.1國際標準,是前者向后者過渡過程中的一個承上啟下的產物。ISO 10646 是國際標準化組織ISO 公布的一個編碼標準,即 Universal Multilpe-字節 Coded Character Set(簡稱UCS),大陸譯為《通用多八位編碼字符集》,臺灣譯為《廣用多八位元編碼字元集》,它與 Unicode 組織的Unicode編碼完全兼容。ISO 10646.1 是該標準的第一部分《體系結構與基本多文種平面》。我國 1993 年以 GB 13000.1 國家標準的形式予以認可(即 GB 13000.1 等同于 ISO 10646.1)??。 GB18030編碼標準 國家標準GB18030-2000《信息交換用漢字編碼字符集基本集的補充》是我國繼GB2312-1980和GB13000-1993之后最重要的漢字編碼標準,是我國計算機系統必須遵循的基礎性標準之一。GB18030-2000編碼標準是由信息產業部和國家質量技術監督局在2000年 3月17日聯合發布的,并且將作為一項國家標準在2001年的1月正式強制執行。GB18030-2005《信息技術中文編碼字符集》是我國制訂的以漢字為主并包含多種我國少數民族文字(如藏、蒙古、傣、彝、朝鮮、維吾爾文等)的超大型中文編碼字符集強制性標準,其中收入漢字70000余個??。 至于漢字,不同的字符集用的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),就得到漢字使用的字符的范圍。 //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++; } } 參考資料 >國際問題
擴展
雙字節
虛擬值
編程相關
代碼算法
漢字編碼