汉字一级字库与二级字库
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汉字一级字库与二级字库 .
分类: java 2012-03-14 23:23 686人阅读评论(0) 收藏举报
编程java网络最近在项目中碰到利用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,如果是就表示它是汉字。