gb2312,GBK,GB18030等重新学习了解

gb2312,GBK,GB18030 国标码查询

参考:

https://blog.csdn.net/wvqusrtg/article/details/110234149

https://www.qqxiuzi.cn/zh/hanzi-gb18030-bianma.php

http://tools.jb51.net/table/gb2312

一、发布时间和汉字数量

GB 2312 于1980年发布,最少,只有6763 个汉字;

GBK于1995年发布,是21886 个汉字;

GB18030最多,分别是27533和70244,2000年和2005年的版本;

二、首先说下gb2312,这个是其他两个的基础,最早发布的就是gb2312;

gb2312编码是用一个类似二维数组一样的表格表示(参考:

http://tools.jb51.net/table/gb2312),

是用区位码表示,分为94个区(01-94),每区94个字符(01-94,汉字第0位和第95位为空),计算机中是用"EUC-CN"表示法,即在每个区位加上0xA0来表示

即第01区是0xA0+0x01 = 0xA1;第1位是0x01+0xA1 = 0xA1;

比如汉字“啊”在区位码是0xB0A1(区位码查询),就表示在0xB0-0xA0 = 0x10区(16区),0xA1-0xA0 = 0x01位;

用生成字库工具做好的字库bin文件,那是按不同字体字模存放的,如“啊”字存放在如下偏移位置:

offset_addr = (0xB0-0xA1)*94+(0xA1-0xA1) ;//减去0xA1而不是0xA0是因为要计算当前在的区位位置前面偏移了多少个区位,减0xA0是为了算当前在哪个区位,。

然后用flash读接口去读改地址就可以得到对应字模数据了;

如读取16x16字模:

offset = (hz_high - 0xA1) * 94 + (hz_low - 0xA1);    //计算汉字所在的区位码偏移
font_add = FONTLIB_Font16_HEAD_ADD;//16x16字模首地址
font_add += offset * 32;//首地址+偏移*每个字模字节数
ExFLASH_Read(font_add, 32, font_buf);//读32个字节该字的字模数据;

三、GBK

GBK 采用双字节表示,总体编码范围为 8140-FEFE 之间,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 XX7F 一条线。GBK 编码区分三部分:

  • 汉字区 包括

GBK/2:0XB0A1-F7FE, 收录 GB 2312 汉字 6763 个,按原序排列;//同GB2312取模即可

GBK/3:0X8140-A0FE,收录 CJK 汉字 6080 个;

GBK/4:0XAA40-FEA0,收录 CJK 汉字和增补的汉字 8160 个。

https://www.qqxiuzi.cn/zh/hanzi-gbk-bianma.php

如读取16x16字模:

offset = (hz_high - 0x81) * 192 + (hz_low - 0x40);    //计算汉字所在的区位码偏移
font_add = FONTLIB_Font16_HEAD_ADD;//16x16字模首地址
font_add += offset * 32;//首地址+偏移*每个字模字节数
ExFLASH_Read(font_add, 32, font_buf);//读32个字节该字的字模数据;

四、GB18030

GB18030 不同于gb2312和GBK的2字节,而是1\2\4字节结构;

兼容GB2312,GBK,即

GB18030-2000汉字

GB18030-2005汉字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值