(转载)中文区位码、国标码、机内码、输入码、字形码
本文轉載自網絡。
如有侵權,請聯系處理!
前言
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)
用于打印的字庫叫打印字庫,其中的漢字比顯示字庫多,而且工作時也不像顯示字庫需調入內存。
總結
以上是生活随笔為你收集整理的(转载)中文区位码、国标码、机内码、输入码、字形码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python public_【速记速学】
- 下一篇: 家庭网关怎么设置路由器天翼宽带家庭网关怎