(轉載)中文區位碼、國標碼、機內碼、輸入碼、字形碼

本文轉載自網絡。

如有侵權,請聯繫處理!

 

前言

980年,爲了使每個漢字有一個全國統一的代碼,我國頒佈了漢字編碼的國家標準:GB2312-80《信息交換用漢字編碼字符集——基本集》,這個字符集是目前國內所有漢字系統的統一標準。它規定了用兩個字節來表示一個漢字,每個字節都只能使用低7位,共有128*128種狀態,又由於ASCII中的控制代碼在漢字系統中也要使用,所以只剩下94*94=8836種狀態用來表示國標碼規定的6763個漢字和682個全角字符。每個字符都對應了唯一的區位碼、國標碼和機內碼。

 

區位碼

爲了使每一個漢字有一個全國統一的代碼,區位碼是國家規定的94*94的一個方陣,其中每行叫做一個區,每列叫做一個位,組合起來就組成了區位碼,我們可以在相關網站查詢某個漢字的區位碼,例如漢字“我”的區位碼是46 50 ,標識“我”在46區,50位。區位碼不能用於通信,因爲它可能與通信使用的控制碼(00H~1FH)發生衝突。

 

國標碼

區位碼+2020H。ASCII只用到了前7位,英文中0到32的字符都是些控制字符,第127位是del字符,即刪除字符,所以總共有34個控制字符。(從0到127)128減去(從0到32是33加上第127位的那一個字符共34)34等於94。所以可供中文使用的是94個狀態。國標碼其實就是交換碼,是中國用來交換的,當然交換碼是不能引起歧義的,94行94列的一個編碼再加上32就是行號從33到126列號也是從33到126。這樣就與0~32的英文控制字符沒有衝突了。爲了進行漢字通信,將區位碼的區碼和位碼都加20H,避開了控制碼,就得到了國標碼。國標碼用十六進制表示,如,漢字“學”的國標碼爲5127H。

 

機內碼

國標碼+8080H。因爲在英文中只有26個字母,所以用一個字節就可以表示了,用一個字節的話可以表示2^8個符號,就是256個符號,綽綽有餘啊,於是外國人制訂了規範,規定0-127(00000000-01111111)個字符他們用了,用來表示英文字符和一些符號,就是ASCII碼,但是漢字有很多,256個根本就不夠,於是國家就用兩個ASCII來表示一個漢字,就是2個字節標識一個漢字,例如“保”的區位碼爲:1703,所以國標碼爲:1703的10進制+2020H=3123H,然而:31H 和23H在ASCII中式有值的,31H在ASCII中表示數字1,23H表示的是“#”(這個可以在網上查詢),那麼如果我以國標碼作爲機內碼的話,如果內存中有兩個字節爲31H和23H,那麼到底是表示漢字“保”呢?還是字符1#呢?這樣就有了歧義,但是解決辦法就有了,0-127不是被英文字符佔了嗎?那麼我就用127之後的來表示不就可以了嗎?於是我把漢字的兩個字節每個字節機上128(16進制就是80H),於是問題解決了,漢字“保”的機內碼變爲:3123H+8080H=B2A3H(10進制就是45475),打開記事本按住alt+45475看看是不是“保”,這樣就不會和英文的ASCII衝突了。

 

輸入碼(外碼)

輸入碼就是使用英文鍵盤輸入漢字時的編碼。目前,我國已推出的輸入碼有數百種,但用戶使用較多的約爲十幾種,按輸入碼編碼的主要依據,大體可分爲順序碼、音碼、形碼、音形碼四類,如“保”?字,用全拼,輸入碼爲碼爲“BAO”,用區位碼,輸入碼爲“1703”,用五筆字型則爲“WKS”。

 

字形碼

字形碼,點陣代碼的一種。爲了將漢字在顯示器或打印機上輸出,把漢字按圖形符號設計成點陣圖,就得到了相應的點陣代碼(字形碼)。

用於顯示的字庫叫顯示字庫。顯示一個漢字一般採用16×16點陣或24×24點陣或48×48點陣。已知漢字點陣的大小,可以計算出存儲一個漢字所需佔用的字節空間。

例:用16×16點陣表示一個漢字,就是將每個漢字用16行,每行16個點表示,一個點需要1位二進制代碼,16個點需用16位二進制代碼(即2個字節),共16行,所以需要16行×2字節/行=32字節,即16×16點陣表示一個漢字,字形碼需用32字節。

即:字節數=點陣行數×(點陣列數/8)

用於打印的字庫叫打印字庫,其中的漢字比顯示字庫多,而且工作時也不像顯示字庫需調入內存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章