从Java转到C++后,对于它的字符串处理能力抱怨了好久
这不,非Unicode下对字符串进行截取有时会出现乱码,因为把一个汉字是两个字节,如果拆开了就显示不正确了
但是,对于汉字来说,第一个字节肯定大于0x80,第二个字节就不一定了,所以,要判断一个字节是不是汉字的一部分,只能从字符串的开头进行扫描:
这不,非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:
}
}
这样就可以在遇到汉字的时候一次跳过两个字节了
{
if (IsDBCSLeadByte(text[i])
{
i++;
//TODO:
}
}