中⽂字库简介,GB2312字库⽤法
常见的汉字字符集编码:
GB2312编码:1981年5⽉1⽇发布的简体中⽂汉字编码国家标准。GB2312对汉字采⽤双字节编码,收录7445个图形字符,其中包括6763个GB2312编码
汉字。
BIG5编码:台湾地区繁体中⽂标准字符集,采⽤双字节编码,共收录13053个中⽂字,1984年实施。
BIG5编码
GBK编码:1995年12⽉发布的汉字编码国家标准,是对GB2312编码的扩充,对汉字采⽤双字节编码。GBK字符集共收录21003个汉字,包含GBK编码
国家标准GB13000-1中的全部中⽇韩汉字,和BIG5编码中的所有汉字。
GB18030编码:2000年3⽉17⽇发布的汉字编码国家标准,是对GBK编码的扩充,覆盖中⽂、⽇⽂、朝鲜语和中国少数民族⽂字,其中收录GB18030编码
27484个汉字。GB18030字符集采⽤单字节、双字节和四字节三种⽅式对字符编码。兼容GBK和GB2312字符集。
Unicode编码
Unicode编码:国际标准字符集,它将世界各种语⾔的每个字符定义⼀个唯⼀的编码,以满⾜跨语⾔、跨平台的⽂本信息转换。
GB2312编码范围:A1A1-FEFE,其中汉字编码范围:B0A1-F7FE。
GB2312编码是第⼀个汉字编码国家标准,由中国国家标准总局1980年发布,1981年5⽉1⽇开始使⽤。GB2312编码共收录汉字6763个,其中⼀级汉字3755个,⼆级汉字3008个。同时,GB2312编码收录了包括拉丁字母、希腊字母、⽇⽂平假名及⽚假名字母、俄语西⾥尔字母在内的682个全⾓字符。
分区表⽰
GB2312编码对所收录字符进⾏了“分区”处理,共94个区,每区含有94个位,共8836个码位。这种表⽰⽅式也称为区位码。
01-09区收录除汉字外的682个字符。
10-15区为空⽩区,没有使⽤。
16-55区收录3755个⼀级汉字,按拼⾳排序。
56-87区收录3008个⼆级汉字,按部⾸/笔画排序。
88-94区为空⽩区,没有使⽤。
举例来说,“啊”字是GB2312编码中的第⼀个汉字,它位于16区的01位,所以它的区位码就是1601。
双字节编码
GB2312规定对收录的每个字符采⽤两个字节表⽰,第⼀个字节为“⾼字节”,对应94个区;第⼆个字节为“低字节”,对应94个位。所以它的区位码范围是:0101-9494。区号和位号分别加上0xA0就是GB2312编码。例如最后⼀个码位是9494,区号和位号分别转换成⼗六进制是
5E5E,0x5E+0xA0=0xFE,所以该码位的GB2312编码是FEFE。
GB2312编码范围:A1A1-FEFE,其中汉字的编码范围为B0A1-F7FE,第⼀字节0xB0-0xF7(对应区号:16-87),第⼆个字节0xA1-
0xFE(对应位号:01-94)。
HZK12 '16x12 宋体汉字点阵 ⼀个汉字24Byteunicode汉字
HZK14 '16x14 宋体汉字点阵 ⼀个汉字28Byte
HZK16 '16x16 宋体汉字点阵 ⼀个汉字32Byte
HZK16F '16x16 繁体宋体汉字点阵 ⼀个汉字32Byte
HZK24F '24x24 仿宋汉字打印点阵 ⼀个汉字72Byte
HZK24H '24x24 ⿊体汉字打印点阵 ⼀个汉字72Byte
HZK24K '24x24 楷体汉字打印点阵 ⼀个汉字72Byte
HZK24S '24x24 宋体汉字打印点阵 ⼀个汉字72Byte
HZK24T '24x24 宋体符号打印点阵 ⼀个符号72Byte
HZK40S '40x40 宋体汉字点阵 ⼀个汉字200Byte
HZK40T '40x40 宋体符号点阵 ⼀个符号200Byte
HZK48S '48x48 宋体汉字点阵 ⼀个汉字288Byte
HZK48T '48x48 宋体符号点阵 ⼀个符号288Byte
HZK16
HZK16字库是符合GB2312标准的16×16点阵字库
HZK16字库⾥的16×16汉字⼀共需要256个点来显⽰,也就是说需要32个字节才能达到显⽰⼀个普通汉字的⽬的。
⼀个汉字占两个字节,这两个中前⼀个字节为该汉字的区号,后⼀个字节为该字的位号。其中,每个区记录94个汉字,位号为该字在该区中的位置。所以要到汉字在hzk16库中的位置就必须得到它的区码和位码。
第⼀个字节-0xA0(因为汉字编码是从0xA0区开始的, 所以⽂件最前⾯就是从0xA0区开始, 要算出相对区码)
区码:
区码:汉字的第⼀个字节-0xA0
第⼆个字节-0xA0
位码:汉字的第⼆个字节-0xA0
位码:
这样我们就可以得到汉字在HZK16中的绝对偏移位置:
offset=(94*(区码-1)+(位码-1))*32
注解:
区码减1是因为数组是以0为开始⽽区号位号是以1为开始的
(94*(区号-1)+位号-1)是⼀个汉字字模占⽤的字节数
最后乘以32是因为汉字库⽂应从该位置起的32字节信息记录该字的字模信息(前⾯提到⼀个汉字要有32个字节显⽰)
HZK12
如果你有UCDOS的HZK24S(宋体)、HZK24K(楷体)或HZK24H(⿊体),你还可以使⽤不同字体的⼤字模汉字了。HZK24系列是24*24的点阵字库,每字模占⽤3*24字节。如果你按照HZK16的显⽰⽅法的话,你会看到......呵呵,字被放倒了。这是因为该类字库与⼀般的汉字库不同,这类⼤字模汉字库是专供打印的打印字库,为了打印的⽅便将字模都放倒了,你使⽤时,只要将字模的位信息纵横转置显⽰即可。例如你如果定义为mat[24][3]则应该这样输出:
for(i=0;i<24;i++)
for(j=0;j<24;j++)
if((0x80>>i%8)&mat[j][i/8]) /*转置显⽰*/
putpixel(j+x,y+i,color);
还有⼀类字库HZK12,虽然属于标准字库类型,但如果你将它的字模当作12*12位计算的话,根本⽆法正常显⽰汉字。因为字库设计者为了使⽤的⽅便,字摸每⾏的位数均补齐为8的整数倍,于是实际该字库的位长度是16*12,虽然每⾏都多出了4位,但这4位都是0(不显⽰),并不影响显⽰效果。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论