GB2312 GBK的點陣字型檔建立與索引

2022-06-22 04:00:17 字數 2405 閱讀 8803

以漢字「啊」為例,它的的機內碼為0xb0a1,0xb0為機內碼高位元組,0xa1為機內碼低位元組

gb2312收錄簡化漢字及符號、字母、日文假名等共7445個圖形字元,其中漢字佔6763個。gb2312規定「對任意乙個圖形字元都採用兩個位元組表示,每個位元組均採用七位編碼表示」,習慣上稱第乙個位元組為「高位元組」,即所謂的區碼。第二個位元組為「低位元組」,即所謂的位碼。gb2312―80包含了大部分常用的

一、二級漢字,和9區的符號。該字符集是幾乎所有的中文系統和國際化的軟體都支援的中文字符集,這也是最基本的中文字符集。其編碼範圍是高位0xa1~0xfe,低位也是0xa1~0xfe;漢字從0xb0a1開始,結束於0xf7fe。gb2312將**表分為94個區,對應第一位元組(0xa1~0xfe);每個區94個位(0xa1~0xfe),對應第二位元組。兩個位元組的值分別為區號值和位號值加32(20h),因此也稱為區位碼。01~09區為符號、數字區,16~87區為漢字區(0xb0~0xf7),10~15區、88~94區是有待進一步標準化的空白區。gb2312將收錄的漢字分成兩級:第一級是常用漢字計3755個,置於16~55區,按漢語拼音字母/筆形順序排列:第二級漢字是次常用漢字計3008個,置於56~87區,按部首/筆畫順序排列。故而gb2312 最多能表示6763 個漢字。點陣庫只要按照這個編碼規則從0xa1a1開始,逐一建立,每個區的點陣大小為每個漢字所用的位元組數乘以94。這樣,就可以得到在這個字型檔裡面定位漢字的方法:

hp=((gbh-0xa1)×94+gbl-0xa1)×(size);

其中gbh、gbl 分別代表gb2312 的第乙個位元組和第二個位元組(也就是高位和低位),size 代表每個漢字點陣所需的位元組數,hp 則為對應漢字點陣資料在字型檔裡面的起始位址。

而gbk內碼完全相容gb2312,同時支援繁體字,總漢字數有2萬多個,編碼格式如下,每個gbk碼由2個位元組組成,第乙個位元組為0x81~0xfe,第二個位元組分為兩部分,一是0x40~0x7e,二是0x80~0xfe。其中與gb2312相同的區域,字完全相同。把第乙個位元組代表的意義稱為區,那麼gbk裡面總共有126個區(0xfe~0x81+1),每個區內有190個漢字(0xfe~0x80+0x7e~0x40+2),總共就有126x190=23940個漢字。點陣庫只要按照這個編碼規則從0x8140開始,逐一建立,每個區的點陣大小為每個漢字所用的位元組數乘以190。這樣,就可以得到在這個字型檔裡面定位漢字的方法:

當gbkl<0x7f 時:hp=((gbkh-0x81)×190+gbkl-0x40)×(size);

當gbkl>0x80 時:hp=((gbkh-0x81)×190+gbkl-0x41)×(size);

其中gbkh、gbkll 分別代表gbk 的第乙個位元組和第二個位元組(也就是高位和低位),size 代表每個漢字點陣所需的位元組數,hp 則為對應漢字點陣資料在字型檔裡面的起始位址。

16x16點陣每個漢字所需的位元組數為32

可以看到,兩個檔案定位到的點陣資料一模一樣,並且與cpp檔案內的點陣資料也一樣。至此,偏移量計算驗證完畢。

接下來,你就可以把bin檔案找個地方存放起來,然後根據機內碼計算偏移量隨意呼叫了

GB2312 GBK與UTF 8的區別

首先,我們要明白,gb2312 gbk 和utf 8 都是一種字元編碼,除此之外,還有好多字元編碼。只是對於我們中國人的 來說,用這三種編碼 比較多。簡單的說一下,為什麼要用編碼,在計算機內,儲存文字資訊用 asc ii 碼,每乙個字元對應著唯一的 ascii 碼。最初計算機是由美國發明的,他們也用...

GB2312 GBK與UTF 8的區別

首先,我們要明白,gb2312 gbk和utf 8都是一種字元編碼,除此之外,還有好多字元編碼。只是對於我們中國人的 來說,用這三種編碼比較多。簡單的說一下,為什麼要用編碼,在計算機內,儲存文字資訊用asc ii碼,每乙個字元對應著唯一的ascii碼。最初計算機是由美國發明的,他們也用的是鍵盤和上面...

GB18030字元編碼格式和點陣字型檔

中國國bai家標準gb2312就是簡體中文字符集 台灣計算機界使用的big5碼是繁體字中文字符集 日本的jis x0208標準是日文漢字字符集 南韓的ks c5601是南韓漢字字符集。ansi 美國國家標準學會 推出了一種雙位元組編碼的標準,將上述三國四方的字符集加以統一,稱為 ansi 編碼。在簡...