判断一个字节是汉字的前一个字节,还是后一个字节

判断一个字节是汉字的前一个字节,还是后一个字节

2008-10-16 15:37

判断一个字节是汉字的前一个字节,还是后一个字节
1> 使用IsDBCSLeadByte函数能够判断一个字符是否是双字的第一个字节,试试看:)
2> _ismbslead _ismbstrail
3> GB2312/GBK用的是高位区码(GBK用扩展的区码)+高位位码拼成一个全角字(双字节),由于区码和位码都在128以上,并且没有可靠的算法分辩两个字节(原因下面我会解释),需要准确搜索时,不能随便从中间定位,因为如果错开了一个字节,就会造成乱码,这样诸如二分法之类的算法都不灵了。
当然,如果你是用等宽的编码,比如UNICODE,或GB2312/GBK全汉字字符(英文和标点用全角汉字),就没有上面的问题,WINDOWS内部就用双字节的UNICODE,代价是资源消耗很大,而后一种所有字符都采用全角的情况很少见。
注:GBK是GB2312的扩展,而GB2312最大的问题之一,是区码的码位和位码规则完全一样,原始的GB2312区位,区是从1到94,位也是1到94,护展到机内码是区号+160,位号加160,各占一个字节,因此从理论上来说,在字符串内以字节为单位随机取一个字节开始,没有可靠的算法可以分辩出这个字节是区码还是位码,而它后面的字串也跟着不能确定,于是精确的搜索字串只能老老实实从第一个字节开始扫描,见到第一个128以上的字节就当成汉字的区位,从它开始定位两个一组解析,直到发现第一个ASCII码为止,于是以字节为单位转入ASCII的分析,直到发现一个大于128的字符......这种循环效率低下是肯定的。

转载于:https://www.cnblogs.com/xilentz/archive/2010/05/09/1731408.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值