字库文件的结构设计为三大块。按顺序分别为字符集信息数据块、各字符集与Unicode转码表数据块和Unicode字库点阵数据块。本设计从实用性出发,考虑各字符集现在的普及情况,字库的设计以简体中文(GB2312)、繁体中文(BIG5)、日文(Shift_Jis)、朝鲜语(Ks_c_5601-1987)四种语言的字符集为对象。利用地址索引的方法将其包含的字符编码映射到Unicode编码之下,然后将其按照Unicode中字库的点整数据显示出来。 字符集信息数据块包含了字库的一些基本信息和各字符集与Unicode的编码映射表的索引地址。字符集信息数据块的第一个字节代表字库所容纳的字符集的总个数;紧接着的十个字节存储了第一个字符集的信息,其中字符集代号占据两个字节,转换表首字节索引偏移地址和转换表末字节索引偏移地址各自占据了四个字节长度。以此类推,字符集信息数据块占据字库文件的长度为: 字符集信息数据块字节长度= 1 + 10*字符集个数; 本设计中采用了简体中文(GB2312)、繁体中文(BIG5)、日文(Shift_Jis)、朝鲜语(Ks_c_5601-1987)四个字符集,所以字符集信息数据块在字库文件中占据了41个字节。 各字符集与Unicode转码表数据块是字库文件的核心,包含了各字符集编码与Unicode编码的映射关系。由于表中每一个Unicode码位占据了2个字节,GB2312中,简体中文的编码由0x8140-0xFE4F,则GB2312与Unicode转换表占据的空间大小为:2*(0xFE4F-0x8140+1)= 64032字节;BIG5中,繁体中文的编码由0xA140-0xF9FE,则BIG5与Unicode转换表占据的空间大小为:2*(0xF9FE-0xA140+1)= 45438字节;Shift_Jis中,日文的编码由0x8140-0xFC4B,则Shift_Jis与Unicode转换表占据的空间大小为:2*(0xFC4B-0x8140+1)= 63000字节;Ks_c_5601-1987中,日文的编码由0x8141-0xFDFE,则Ks_c_5601-1987与Unicode转换表占据的空间大小为:2*(0xFDFE-0x8141+1)= 63868字节;所以本设计中,各字符集与Unicode转码表数据块所占的空间为:64032+45438+63000+63868=236338字节。 Unicode字库点阵数据块是以Unicode编码顺序生成的对应字符的点阵数据。本设计考虑LCD的尺寸大小和显示效果,采用的是12*12的显示点阵。即Unicode中每一个编码对应的字符都由12*12的点阵数据描绘在LCD12864液晶显示器上。 根据点整的显示原理,字节的每一个位都表示一个显示像素点的状态,所以一个12*12的字符点整数据至少需要12*12=144个位来描述。但数据的处理一般都是以字节即八个位为单位进行处理的,考虑到数据的存储、编码与解码的方便性,设计将采用12*2=24个字节来描述一个12*12的点阵。 24字节描述点阵方案:数据表示采用阳码方式,每两个字节为一组来描述点阵的一行显示状态,一共分位12组,分别对应点阵的12行。每组第一个字节记为“高字节”,第二个字节记为“低字节”。“高字节”全八位与“低字节”中的高四位组成12位来描述对应行中的显示状态,“低字节”第四位为非数据,置为0。 Unicode采用普及的UCS-2内码,以两个字节编码。一共有65536个码位。所以制作生成的Unicode字库点阵数据所占的空间大小为:24*65536=1572864字节。
|