計算機只識別由0、1組成的代碼,ASCII碼是英文信息處理的標準編碼,漢字信息處理也必須有一個統一的標準編碼。我國國家標準局于1981年5月頒布了《信息交換用漢字編碼字符集──基本集》,代號為GB2312-80,共對6763個漢字和682個圖形字符進行了編碼,其編碼原則為:漢字用兩個字節表示,每個字節用七位碼(高位為0),國家標準將漢字和圖形符號排列在一個94行94列的二維代碼表中,每兩個字節分別用兩位十進制編碼,前字節的編碼稱為區碼,后字節的編碼稱為位碼,此即區位碼,如"保"字在二維代碼表中處于17區第3位,區位碼即為"1703
"。
國標碼并不等于區位碼,它是由區位碼稍作轉換得到,其轉換方法為:先將十進制區碼和位碼轉換為十六進制的區碼和位碼,這樣就得了一個與國標碼有一個相對位置差的代碼,再將這個代碼的第一個字節和第二個字節分別加上20H,就得到國標碼,相當于如果不轉換的話,在兩個字節上分別加上32即可。如:"保"字的國標碼為3123H,它是經過下面的轉換得到的:1703D->1103H->+20H->3123H。
國標碼是漢字信息交換的標準編碼,但因其前后字節的最高位為0,與ASCII碼發生沖突,如"保"字,國標碼為31H和23H,而西文字符"1"和"#"的SCII也為31H和23H,現假如內存中有兩個字節為31H和23H,這到底是一個漢字,還是兩個西文字符"1"和"#"?于是就出現了二義性,顯然,國標碼是不可能在計算機內部直接采用的,于是,漢字的機內碼采用變形國標碼,其變換方法為:將國標碼的每個字節都加上128,即將兩個字節的最高位由0改1,其余7位不變,也就是如果國標碼是16進制的,直接加上8080H即可。如:由上面我們知道,"保"字的國標碼為3123H,前字節為00110001B,后字節為00100011B,高位改1為10110001B和10100011B
即為B1A3H,因此,"保"字的機內碼就是B1A3H。
顯然,漢字機內碼的每個字節都大于128,這就解決了與西文字符的ASCII碼沖突的問題。
如上所述,漢字輸入碼、區位碼、國標碼與機內碼都是漢字的編碼形式,它們之間有著千絲萬縷的聯系,但其間的區別也是不容忽視的。
公式總結:
區位碼 + 2020H = 國標碼
國標碼 + 8080H = 機內碼
? ? ? ?為了適應計算機處理漢字信息的需要,1981年我國頒布了GB2312國家標準。該標準選出6763個常用漢字(其中,一級常用漢字3755個,二級漢字3008個)和682個非漢字字符,并為每個字符規定了標準代碼,以便在不同的計算機系統之間進行漢字文本交換。
GB2312字符集構成一個94行、94列的二維表,行號稱為區號,列號稱為位號,每一個漢字或符號在碼表中的位置用它所在的區號和位號來表示。
為了處理與存儲的方便,每個漢字的區號和位號在計算機內部分別用一個字節來表示。例如,“學”字的區號為49,位號為07,它的區位碼即為4907,用2個字節的二進制數表示為:
00110001 00000111
區位碼無法用于漢字通信,因為它可能與通信使用的控制碼(00H~1FH)(即0~31)發生沖突。ISO2022規定每個漢字的區號和位號必須分別加上32(即二進制數00100000),經過這樣的處理而得的代碼稱為國標交換碼,簡稱交換碼,因此,“學”字的國標交換碼計算為:
?00110001 00000111
+00100000 +00100000
-------------------
?01010001 00100111
用十六進制數表示即為5127H。
由于文本中通常混合使用漢字和西文字符,漢字信息如果不予以特別標識,就會與單字節的ASCII碼混淆。此問題的解決方法之一是將一個漢字看成是兩個擴展ASCII碼,使表示GB2312漢字的兩個字節的最高位都為1。這種高位為1的雙字節漢字編碼即為GB2312漢字的機內碼,簡稱為內碼。
因此,“學”字的機內碼為:
11010001 10100111
用16進制表示即為D1A7H。
最后要指出的是,漢字的輸入編碼與漢字的機內碼是不同范疇的概念。不管采用什么樣的編碼輸入法(例如拼音、五筆字型等)來輸入一個漢字,其機內碼都是相同的。
說明:本文整理自《大學計算機信息技術教程》(南京大學出版社)一書。
-----------------------------------------------------------------
漢字庫通俗地說就是計算機軟件系統中的漢字倉庫,依據不同的標準,字庫中漢字的數量是不同的,以前的主要標準有:
1、GB 2312 漢字編碼字符集
從1975年開始,我國為了研究漢字的使用頻度,進行了大規模的字頻統計工作,內容包括工業、農業、軍事、科技、政治、經濟、文學、藝術、教育、體育、醫藥衛生、天文地理、自然、化學、文字改革、考古等多方面的出版物,在數以億計的浩瀚文獻資料中,統計出實際使用的不同的漢字數為6335個,而其中有3000多個漢字的累計使用頻度達到了99.9%,而另外的3000多個累計頻度不到0.1%,說明了常用漢字與次常用漢字的數量不足7000個,這就為國家制定漢字庫標準提供了依據。1980年頒布了《信息交換用漢字編碼字符集—基本集》的國標交換碼,國家標準號為:GB2312-80,選入了6763個漢字,分為兩級,一級字庫中有3755個,是常用漢字,二級字庫中有3008個,是次常用漢字;還選入了682個字符,包含有數字、一般符號、拉丁字母、***假名、希臘字母、俄文字母、拼音符號、注音字母等。以前我國大陸的各種中文DOS版本、Windows3.1 /3.2版本,裝入的字庫都是國標一二級字庫。遇到“镕、啰、瞭、袆、祎、曌、赟、贇、鱻、驫、犇……”等漢字,既無法輸入,又不能打印。?
后來國家技術監督局又頒布了一個與之相對應的繁體字集,全稱《信息交換用漢字編碼字符集輔助集》,標準號為GB/T12345-90。
-----------------------------------------------------------------
GB2312編碼大約包含6000多漢字(不包括特殊字符),編碼范圍為第一位b0-f7,第二位編碼范圍為a1-fe(第一位為cf時,第二位為a1-d3),計算一下漢字個數為6762個漢字。當然還有其他的字符。包括控制鍵和其他字符大約7573個字符編碼。
GBK編碼是對GB2312編碼的擴充,容納的漢字更多,但僅僅是擴充,沒有質的變化。保留了所有G B2312編碼,在此基礎上進行編碼范圍的擴充.容納(包含特殊字符)共22014個字符編碼。
GB18030編碼是在gbk編碼基礎上的擴充,因為漢字更多,僅僅使用兩位編碼已經不能容納要求的漢字,所以采用了2\4位混和的辦法,可以支持更多的漢字編碼。并且保留了原有的GBK 2字節編碼兼容GB2312和GBK編碼的文件。大概容納55657個編碼(包含特殊字符)。
unicode編碼(也就是UTF編碼):俗稱萬國碼,致力于使用統一的編碼準則表達各國的文字。為表達更多的文字,utf-8采用2/3混編的方式。目前容納的漢字范圍小于gbk編碼。并且以3字節的方式處理中文,帶來了兼容性的問題,原有的GBK,GB2312,GB18030編碼文件都不能正常的處理,還有很長的路要走。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
