关于判断一个字节是不是头字节的问题(IsDBCSLeadByte)
我用IsDBCSLeadByte来判断一个字节是不是头字节
可是不管是不是头字节,只要是汉字返回都是1
哪位知道这是怎么回事
以下是我的测试代码
CString sc = "一二";
TCHAR doubleByte = sc.GetAt(1);
int isDoubleByte = IsDBCSLeadByte(doubled);
isDoubleByte返回是1
应该返回0才对
非常感谢您的回答
注意MSDN上对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). ”
注意那个“potentially”。
换句话说,如果IsDBCSLeadByte说不是的,肯定不是,如果IsDBCSLeadByte说是的,有可能是。
之所以出现这种情况,就是因为有些byte,即可能是某个汉字的第一个字节,也可能做汉字的第二个字节。
也就是说,汉字的前后两个字节构成的集合是有交集的。
所以,还是那句话,要想用IsDBCSLeadByte做准确判断地话,你只能判断出不是的。
我觉得只能是IsDBCSLeadByte跟手工编程结合起来。比如:
从第一个字节开始扫描字符串,直到找到一个IsDBCSLeadByte返回1的,这时,由于它前面的那个返回的是0,所以这一个必是汉字的第一个字节,既然它必是第一个,啥都不用判断,它后边的那个必是第二个。
于是,同时把这两个提取出来,作为一个汉字,然后从刚才第二个之后继续进行上面的过程。