我用IsDBCSLeadByte来判断一个字节是不是头字节
可是不管是不是头字节,只要是汉字返回都是1
哪位知道这是怎么回事以下是我的测试代码
CString sc = "一二";
TCHAR doubleByte = sc.GetAt(1);
int isDoubleByte = IsDBCSLeadByte(doubled);isDoubleByte返回是1
应该返回0才对非常感谢您的回答

解决方案 »

  1.   

    注意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说是的,有可能是。
      

  2.   

    Zero-based index of the character in the CString object.
    sc.GetAt(1);参数是从0开始的,所以你返回的是第一个了
      

  3.   

    GetAt(1)是获得“一”的后半个字节
    用那个函数就应该返回0
      

  4.   

    之所以出现这种情况,就是因为有些byte,即可能是某个汉字的第一个字节,也可能做汉字的第二个字节。
    也就是说,汉字的前后两个字节构成的集合是有交集的。所以,还是那句话,要想用IsDBCSLeadByte做准确判断地话,你只能判断出不是的。
      

  5.   

    steedhorse(晨星)高人啊
    一语道破那哪位知道还有没有其他的可以解决中英文混合排版的方法
    请赐教有没有现成的函数
      

  6.   

    我觉得只能是IsDBCSLeadByte跟手工编程结合起来。比如:从第一个字节开始扫描字符串,直到找到一个IsDBCSLeadByte返回1的,这时,由于它前面的那个返回的是0,所以这一个必是汉字的第一个字节,既然它必是第一个,啥都不用判断,它后边的那个必是第二个。
    于是,同时把这两个提取出来,作为一个汉字,然后从刚才第二个之后继续进行上面的过程。
      

  7.   

    只能从第一个字节开始判断。
    如果不是因为multibyte处理这类问题比较麻烦,估计没人会愿意使用浪费空间较大的unicode编码。