汉字一级字库与二级字库

最近在项目中碰到利用java默认的Collator.getInstance(Locale.China)进行默认的拼音排序时有一部分汉字无法正确的通过默认的排序方式自动进行排序。查询了一下资料,原来问题出现在中文字库上面,默认的一级字库是采用的拼音排序方式,而二级字库中的汉字默认却是采用的部首笔划的顺序排列的。在此将网络上关于汉字的一级字库和二级字库信息的资料做一个小小的总结。

为了使每一个汉字有一个全国统一的代码,1980年,我国颁布了第一个汉字编码的国家标准: GB2312-80信息交换用汉字编码字符集》基本集,这个字符集是我国中文信息处理技术的发展基础,也是目前国内所有汉字系统的统一标准。由于国标码是四位十六进制,为了便于交流,大家常用的是四位十进制的区位码。所有的国标汉字与符号组成一个94×94的矩阵。在此方阵中,每一行称为一个"区",每一列称为一个"位",因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94)、每个区内有94个位(位号分别为01到94)的汉字字符集。一个汉字所在的区号和位号简单地组合在一起就构成了该汉字的"区位码"。在汉字的区位码中,高两位为区号,低两位为位号。 在区位码中,01-09区为682个特殊字符,16~87区为汉字区,包含6763个汉字 。其中16-55区为一级汉字(3755个最常用的汉字,按拼音字母的次序排列),56-87区为二级汉字(3008个汉字,按部首次序排列)。


汉字的内码用两个字节。每个字节都是从160十进制(A0十六进制,10100000二进制)开始,也就是两个高位位1表示是内码。高字节对应区位码中的区码,低字节对应区位码中的位码。 
由于低字节从10100000开始,这样一个区就只能表示95个字,又由于区位码中的位码是从1开始的,这样内码低字节表示位码是从10100001(161)开始,就只能表示94个字,这正对应区位码中的每区94个汉字。 

一个汉字内码与区位码的关系是: 
十进制 
内码高字节=区码+160 内码低字节=位码+160 
十六进制 
内码高字节=区码+A0 内码低字节=位码+A0 
由于汉字的区码是从16开始的,16+160=176,这样汉字的内码的高字节就是从176开始的,得到一个规律: 

因此要判断一个字符是否是汉字的方法(对于Unicode字符,因为它是用两个字节表示一个字符,也是现在编程较常用的表示和存放字符的方法): 
读出字符的高字节,将其转换位十进制,然后判断其是否大于等于(>=)176,如果是就表示它是汉字。 
如果为了可靠,可以在判断完高字节后,再读出低字节,将其转换位十进制,然后判断其是否大于(>)160,如果是就表示它是汉字。 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值