完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`例说FPGA连载81:TXT文本阅读器设计之GB2312中文字符集简介 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc 概述 GB2312是一个简体中文字符集的中国国家标准,全称为《信息交换用汉字编码字符集-- 基本集》,由中国国家标准总局发布,1981年5月1日实施。GB2312编码通行于大陆,新加坡等地也采用此编码。几乎所有的中文系统和国际化的软件都支持GB2312。 GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄罗斯语西里尔字母在内的682个全形字符。GB2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖99.75%的使用频率。 分区表示 GB2312中对所收汉字进行了“分区”处理,每区含有94个汉字或符号。这种表示方式也称为区位码。 ● 01-09区为特殊符号。 ● 16-55区为一级汉字,按拼音排序。 ● 56-87区为二级汉字,按部首/笔画排序。 ● 10-15区及88-94区则未有编码。 举例来说,“啊”字是GB2312之中的第一个汉字,它的区位码就是1601。 字节结构 在使用GB2312的程序中,通常采用EUC储存方法,以便兼容于ASCII。每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”(或称MSB),第二个字节称为“低位字节”(或称LSB)。 “高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0)区间的数据进行编码,“低位字节”使用了0xA1-0xFE(把01-94加上0xA0)区间的数据进行编码。 例如“啊”字在大多数程序中,会以0xB0A1储存。(由区位码计算为:0xB0=0xA0+16,0xA1=0xA0+1)。 结合前面的分区,我们可以将GB3212的编码规则归纳如下。 ● 每个汉字或符号用2个字节表示,高字节代表其所在分区,低字节代表具体的编码值。 ● 编码高字节,即分区字节的取值范围是0xA1-0xF7,共94个可用的分区。 ● 编码低字节,即具体的编码值取值范围是0xA1-0xFE,共94个可用编码值。 对于分区字节,又分为以下几个部分。 ● 0xA1-0xA9区为特殊符号。 ● 0xB0-0xD7区为一级汉字,按拼音排序。 ● 0xD8-0xF7区为二级汉字,按部首/笔画排序。 ● 0xAA-0xAF区及0xF8-0xFE区则未有编码。 字模显示原理 如图16.3所示,这是某字符取模软件的截图。它大体示意出了字模显示的基本原理。通常,我们若希望在液晶屏上显示出一个字符,比如这个字符是分辨率为64*32的“A”,那么在这个显示区域内,我们就必须有64*32个像素点对应的色彩数据来表示这个字符。当然,每个像素点的色彩可以用24bit(RGB888)表示,也可以用16bit(RGB565)表示。但是,从最经济实用的角度来看,我们还是愿意用最小的数据量去表示最重要的特征信息。因此,通常的字模只会花1bit来表示1个像素点。1bit的数据可以是0,也可以是1,我们可以假设代表某个像素点的1bit为1时,显示图示的白色;为0时,显示图示的黑色。当然了,我们不会这么“土得掉牙”的让这些字符在我们的液晶屏上只显示黑白了,我们可以换任何我们期望的颜色,这是后话,设计中我们可以变通。那么,对于64*32分辨率的字符“A”,我们需要64*32bit,即256Byte数据就可以表示出来。 图16.3 基于像素点的字符显示 我们这个实例中涉及到的GB3212中文字符分别有3种分辨率大小,即16*16、32*32和64*64,它们所需要的Flash存储空间计算如表16.1所示。 表16.1 不同分辨率字体所需字模数据量
实际字库存储结构 标准的GB2312码,出于“节能减排”的需要,我们不管它们的编码如何,字模数据一定是按顺序依次排列。因此,对于给定的高字节为MSB、低字节为LSB的GB2312码,它在我们的字库中的寻址换算为:(((MSB- 0xa1) * 0x5e) + (LSB - 0xa1)) 。 由于GB2312中并没有定义ASCII码,而我们实际的工程使用中通常会非常频繁的使用ASCII码。ASCII码只有1个字节表示,取值为0x00-0x7F。因此,我们在原有的GB2312标准字库字模中人为的插入一些我们ASCII码对应的字库。 如图16.4所示,在GB2312定义的0xA4分区中,这些符号恐怕我们这辈子都用不上,那么我们就考虑直接将ASCII码的字模存放在这个区域。从0x21~0x7f对应的ASCII码为“!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~”,我们就将它们的字模分别存放到GB2312的0xA4分区中。 |
||
相关推荐
1 个讨论
|
||
只有小组成员才能发言,加入小组>>
882个成员聚集在这个小组
加入小组4499 浏览 0 评论
特权同学 Verilog边码边学 Lesson01 Vivado下载与安装
2611 浏览 1 评论
玩转Zynq连载50——[ex69] FIR滤波器IP仿真实例
4292 浏览 2 评论
玩转Zynq连载49——[ex68] MT9V034摄像头的图像FFT滤波处理
5239 浏览 1 评论
玩转Zynq连载48——[ex67] Vivado FFT和IFFT IP核应用实例
5270 浏览 0 评论
1920浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 13:26 , Processed in 0.685475 second(s), Total 59, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号