汉字转拼音的C++实现及原理_gb2312区位码篇

  • 背景
    因最近做模糊搜索功能,需要支持拼音、首字母、大小写搜索。所以网上翻了很多汉字转拼音的例子,大多数都只是贴了代码,没有讲具体原理。后来博主各处搜索,找到了几处解释。现将这些内容统一整理到一处。便于需要的人和自己以后拿来复用。

    本文主要介绍汉字转拼音的实现。首字母的实现请参照汉字转首字母字符串。以后有精力我也会补充一篇汉字转首字母原理的讲解。汉字转拼音的处理主要有以下两种思路。

    1. 根据编码范围确定汉字拼音。此方法的弊端是一些生僻字无法处理,比如:“囧”。无法转换出声调。
    2. 利用字库,查找汉字拼音。可用本地字库,也可以从网站抓取数据。

    本文讲解的是第一种方式的实现。关于第二种可参考汉字转拼音终结篇

  • 原理
    根据编码范围确定汉字拼音。这里我用的是gb2312编码。由于区位码与汉字一一对应。所以我们可以根据区位码找到对应的汉字。因gb2312的第16-55区是按拼音顺序排列的一级汉字(比较常用的汉字)。所以用范围可以确定一级汉字的拼音,如区位码在[1601, 1603)集合,拼音为a;区位码在[1603,1616)集合,拼音为ai。而gb2312的第56-87区是按偏旁部首排列的二级汉字(不常用的汉子),我们就无法用范围确定一个字的拼音。只能列举出区位码对应的拼音。形如:

    case 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值