关于中文文本的截取

从Java转到C++后,对于它的字符串处理能力抱怨了好久
这不,非Unicode下对字符串进行截取有时会出现乱码,因为把一个汉字是两个字节,如果拆开了就显示不正确了

IsDBCSLeadByte

The IsDBCSLeadByte function uses the ANSI code page to determine whether a specified byte is potentially a lead byte that is, the first byte of a two-byte character in a double-byte character set (DBCS).

To use a different code page, use the IsDBCSLeadByteEx function.

BOOL IsDBCSLeadByte(
BYTE TestChar   // character to test
);
MSDN里有这个函数,可以判断一个char是不是一个双字节字的开始.
但是,对于汉字来说,第一个字节肯定大于0x80,第二个字节就不一定了,所以,要判断一个字节是不是汉字的一部分,只能从字符串的开头进行扫描:
for  ( int  i  =   0 ; i  <  text.length(); i ++ )
{
    
if (IsDBCSLeadByte(text[i])
    
{
        i
++;
        
//TODO:
    }

}
这样就可以在遇到汉字的时候一次跳过两个字节了  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值