漢字的內碼和區位碼與顯示漢字原理

2021-06-19 10:04:09 字數 1838 閱讀 3976

漢字的內碼和區位碼

在計算機中英文本元是用乙個位元組的ascii碼表示,該位元組最高位一般置0或用做奇偶校驗,故實際是用7位碼來代表128個字元的,但對於眾多的漢字,只有用兩個位元組才能代表,這樣用兩個位元組代表乙個漢字的**體制,國家制定了統一標準,稱為國標碼。

國標碼規定,組成兩位元組**的最高位為0,即每個位元組僅只使用7位,這樣在機器內使用時,由於英文的ascii碼也在使用,可能將國標碼看成兩個ascii碼,因而規定用國標碼在機內表示漢字時,將每個位元組的最高位置1,以表示該碼表示的是漢字,這些國標碼兩位元組最高位加1後的**稱為機器內的漢字**,簡稱內碼。 

國家標準的漢字字符集(gb2312-80)在漢字作業系統中是以漢字型檔的形式提供的。漢字型檔結構作了統一規定,即將字型檔分成94個區,每個區有94個漢字(以位做區別),每乙個漢字在漢字型檔中有確定的區和位編號(用兩個位元組),就是所謂的區位碼,區位碼的第乙個位元組表示區號,第二個位元組表示位號,只要知道了區位碼,就可知道該漢字在字型檔中的位址。

當我們用某種輸入裝置例如鍵盤將漢字輸入計算機時,管理模組將自動的把鍵盤輸入的漢字轉換為內碼。當要顯示該漢字時,再由內碼轉換成區位碼,在漢字型檔找到該漢字,進行顯示。如「哈」的區位碼為2594,它表示該字字模在字符集的第25個區的第94個位置。

每個漢字在字型檔中是以點陣形式儲存的,常採用12×12、16×16、24×24、48×48點陣形式,同英文本模一樣,每個點用乙個二進位制bit位表示,bit=1的點,當顯示時,就可以在屏上顯示乙個點,bit=0的點,則在屏上不顯示,這樣把存某字的點陣資訊直接用來在顯示器上按上述原則顯示,將出現對應的漢字。最常用的漢字是16×16點陣,它是由行、列各16個點,共256個點組成的位圖案,每行的16個點在記憶體中佔二個位元組,乙個16×16點陣漢字共16行,在記憶體中佔32個位元組。

根據這些位元組在字膜中存放的順序,第一行的第乙個位元組我們稱「0」號位元組,第二個位元組我們稱「1」號位元組;第二行的第乙個位元組我們稱「2」號位元組,第二個位元組我們稱「3」號位元組。以此類推,最後一行的第乙個位元組我們稱「30」號位元組,第二個位元組我們稱「31」號位元組,每個位元組高位在前,低位在後,即d7在乙個位元組的最左側,d0在最右側。具體如圖3-3所示: 

如我們要在螢幕的x行y列位置顯示上面的「哈」字,則可以從點(x,y)開始將0號位元組和1號位元組的內容輸出到螢幕上;然後行加1,列再回到,輸出2號位元組和3號位元組,依此類推16個迴圈即可完成乙個漢字的顯示. 輸出乙個位元組資料時,該位元組中「位」(bit)為1時在該「位」位置打點,為0時該「位」位置打空白。

此外常用的漢字還有24×24點陣,它是由行列各24個點組成的位圖案,它每列的24個點在記憶體中佔三個位元組,乙個24×24點陣漢字共24列,在記憶體中佔72個位元組;48×48點陣,行×列為48×48,乙個漢字佔記憶體288個位元組。12×12點陣(為方便程式設計把列12點擴充套件為16點,既二個位元組)行×列為12×16,乙個漢字佔記憶體24個位元組。

gb2312-80中,94個區中除6763個漢字外,第3~7區給這些符號留下了位置,如第3區為英文大小寫符號、第4區為日文平假名、第5區為日文片假名、第6區為大小寫希臘字母、第7區為大小寫俄羅斯字母。這些字元每乙個都有固定的區位碼,當然也都有乙個固定的內碼。當用某種輸入法輸入乙個西文字元時,在計算機中是用程式碼頁示的,顯示時通過內碼計算出區位碼,找到該字元字模進行顯示。其中英文本元比較特殊,在西文作業系統中,如上所述,它是以ascii碼儲存的,而在漢字作業系統中,它是做為乙個漢字,以內碼方式儲存。

根據漢字獲得其區位碼

學生在填寫高考資訊表時,通常都需要將自己名字所對應的區位碼填寫到高考資訊表的對應方格中,那麼如何獲取漢字的區位碼呢?下面通過乙個例項進行講解。例 建立乙個控制台應用程式,使用while語句定義乙個死迴圈,以便能夠迴圈輸入資訊 在該迴圈中,首先輸入漢字,然後根據輸入的漢字獲取其區位碼並輸出到控制台中。...

從漢字到區位碼的轉換

學校要我們填寫畢業生的情況表,機讀卡那種,姓名要用區位碼.我想如果用程式來查詢的話,就是資料庫查詢,我想編乙個應該很簡單的,就上網看看有沒有類似的程式,然後我再用它的資料庫自己實現乙個,可讓我查到了乙個文章講如何實現從漢字到區位碼的轉換,呵呵,可以不用資料庫了.區位碼是與漢字一一對應的編碼,用四位數...

Delphi的學習筆記九 漢字與區位碼

在沒有 uncode 的時代,用 256 個 acsii 只是方便了英文,其他文字怎麼辦?那時是各自為政的,譬如中文就有 gb2312 80 國內簡體 big5 台灣繁體 hkscs 香港繁體 但它們互不相容.gb2312 1980年 後來公升級到 gbk 1995年 現在電腦上使用的是 gb180...