最近在项目中碰到利用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,如果是就表示它是汉字。

汉字一级字库与二级字库相关推荐

  1. 【STM32H7】第20章 ThreadX GUIX汉字显示(QSPI Flash全字库)

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429 第20章       ThreadX GUIX汉字显示(QSPI ...

  2. hibernate之 一级缓存和二级缓存

    2019独角兽企业重金招聘Python工程师标准>>> 缓存 缓存的实现不仅需要作为物理介质的硬件,同时需要管理缓存的并发访问策略和过期策略的程序(软件).所以缓存通常是通过软件和硬 ...

  3. Hibernate之一级缓存和二级缓存

    1:Hibernate的一级缓存: 1.1:使用一级缓存的目的是为了减少对数据库的访问次数,从而提升hibernate的执行效率:(当执行一次查询操作的时候,执行第二次查询操作,先检查缓存中是否有数据 ...

  4. MySQL的一级索引和二级索引介绍,HBase中提到的二级索引【笔记自用】

    1.一级索引 索引和数据存储在一起,都存储在同一个B+tree中的叶子节点.一般主键索引都是一级索引. 2.二级索引 二级索引树的叶子节点存储的是主键而不是数据.也就是说,在找到索引后,得到对应的主键 ...

  5. Mybatis一级缓存,二级缓存的实现就是这么简单

    介绍 又到了一年面试季,所以打算写一点面试常问的东西,争取说的通俗易懂.面试高级岗,如果你说熟悉Mybatis,下面这些问题基本上都会问 Mybatis插件的实现原理? 如何写一个分页插件? Myba ...

  6. mybatis高级(3)_延迟加载_深度延迟_一级缓存_二级缓存

    设置延迟加载需要在mybatis.xml中设置 注: 侵入式延迟加载为真时是延迟加载 侵入式延迟加载为假时是深度延迟加载 <!-- 延迟加载和深度延迟加载 --><settings& ...

  7. MyBatis框架:延迟加载策策略、一级缓存、二级缓存

    MyBatis框架:延迟加载策略和缓存 Mybatis 延迟加载策略 1.1 何为延迟加载? 1.2 实现需求 1.3 使用association实现延迟加载 1.3.1 账户的持久层DAO接口 1. ...

  8. Hibernate 一级缓存,二级缓存,查询缓存

    概念: 1.什么是缓存呢? 缓存:是计算机领域的概念,它介于应用程序和永久性数据存储源之间. 缓存:一般人的理解是在内存中的一块空间,可以将二级缓存配置到硬盘.用白话来说,就是一个存储数据的容器.我们 ...

  9. 项目整合一级缓存和二级缓存

    Redis+ehCache实现两级缓存 spring boot中集成了spring cache,并有多种缓存方式的实现,如:Redis.Caffeine.JCache.EhCache等等.但如果只用一 ...

  10. (C++)函数参数传递中的一级指针和二级指针

    主要内容: 1.一级指针和二级指针 2.函数指针传递的例子 3.什么时候需要传递二级指针? 4.二级指针在链表中的使用 1.一级指针和二级指针 一级指针:即我们一般说的指针,就是内存地址; 二级指针: ...

最新文章

  1. [大数据之Spark]——Actions算子操作入门实例
  2. git查看一个文件的历史记录
  3. MyBatis传入多个参数的问题
  4. 【PAT乙级】1080 MOOC期终成绩 (25 分)
  5. 查看php 相关信息
  6. python公里转海里_海里、公里、英里之间的转换
  7. iphone桌面横屏设置在哪里_iPhone的实用攻略如此多,这4个你知道吗?
  8. SNMP在园区企业网络中的应用
  9. Go语言的IO库那么多,我该怎么选?
  10. 关于AdvancedDataGrid的header的数据传递
  11. 全网最详细 TCP 参数讲解,再也不用担心没有面试机会了......
  12. 03_java基础(四)之方法的创建与调用
  13. AMD Catalyst 14.4 Linux带来完整的 OpenGL 4.4 支持
  14. 【收藏】DIABLO 2 CD KEY
  15. 正负数据如何归一化_数据归一化方法大全
  16. 小说阅读,原生小说APP源码出售,可二次开发 四端互通:android端,ios端,h5端,公众号端
  17. 微信/支付宝扫码支付流程
  18. Linux系统基础小白学习(更新中)
  19. 【PG】PG基础操作
  20. 百度地图AK鉴权说明与白名单设置方法

热门文章

  1. Windows下安装PyQt5教程
  2. SFML1 俄罗斯方块代码解析
  3. 【项目管理】在IDEA中使用MyBatis_Generator生成Dto、Dao、Mapping
  4. 本泽马梅开二度瓦拉内染红 10人皇马4:2客胜西班牙人
  5. Windows 系统常用工具软件
  6. MySQL innodb存储引擎的数据存储结构
  7. Java实用教程-Java基本语法-Java程序的构成
  8. 【商品架构day8】京东几百亿的商品怎么搜索
  9. EVE-NG之dynamips镜像重新计算idle值
  10. Windows xp多国语言包