提供点线索

解决方案 »

  1.   

    汉字用的都是扩展ASCII,也就是说>128.
      

  2.   

    CString strHZ;
    strHZ="汉字";
    char szHZ[100];
    sprintf(szHZ,"%s",strHZ);
    if(szHZ[0]<0)
       AfxMessageBox("汉字");
      

  3.   

    我是这样做的
     CString str;
     int i; 
    char p;
     p=str[i];
    if((unsigned char*)p>0x80)
    AfxMessageBox("这是半个汉字");
    else 
    AfxMessageBox("这不是半个汉字");
      

  4.   

    英文属于单子节编码, 汉字属于多字节编码,国际标准多字结为UNICODE编码,标准之中定义了世界上大部分国家的代码页,一般代码为双字节,第一字节为前导字节表明语种,第二字节为代码页中对应的字符.
       我国用的是自己定义的GB码,有些是双字节,有些是多字节,于UNICODE很不一样,
    其实光凭HEX值,是可以显示任何代码页中的字符的,关键是要和代码页对应上,两个Hex值就可以显示一个汉字.
       英文中每一个字符值(大小写)必小于128, 如果你的CString只有两种情况(全英文或全汉字)判断起来比较容易,汉字编码的第一个字节的最高位为1(>128无论是几个字节编码),若是英汉混合的情况,要检出其中一种,稍微麻烦一点,若要处理多国语言,好像有多国语言API函数,可以通过统计的方法检出一直对应的代码页.
       我以前涉及过多国语言字符的检索和显示的问题,但没有做得很深!
    这里仅提供一种思路,有错的请回贴或发邮件到[email protected],不胜感激!
      

  5.   

    汉字GB码等等,是DBCS编码,可以通过检查第一个byte是不是DBCS lead byteBOOL IsDBCSLeadByte(
      BYTE TestChar    // character to test
    );BOOL IsDBCSLeadByteEx(
      UINT CodePage,   // identifier of code page
      BYTE TestChar    // character to test
    );
    CodePage = 936 简体汉字, 950 繁体如果第一个字符是DBCS lead byte,该byte和紧接着的byte组成一个DBCS码。
    如:while(i < Length)
    {
        if(IsDBCSLeadByte(string[i]))
        {
             // 是DBCS
             i += 2;
        }
        else
        {
            // 英文
            i ++;
        }
    }
      

  6.   

    国际标准多字结为UNICODE编码,标准之中定义了世界上大部分国家的代码页,一般代码为双字节,第一字节为前导字节表明语种,第二字节为代码页中对应的字符.--- Hawk_lp(流浪者) 
    好像unicode是4字节,即双字,即32bit,不知道是不是笔误?
      

  7.   

    CString ss="你好今天真热";BOOL bIsChinese=TRUE;
    int i=0;
    While(i<strlen(ss))
    {
        if(ss[i]>=0xa0)//全角
        {
            i++;
            i++;
        }
        else//半角
        {
            bIsChinese = FALSE;
            break;
        }
    }
      

  8.   

    IsDBCSLeadByteEx函数,详情查阅msdn
      

  9.   

    输入汉字时,它向系统发2次WM_CHAR消息,只要取2次低位拼一下就可以了
    void CGlyphDemoView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    CGlyphDemoDoc* pDoc;
    pDoc = reinterpret_cast<CGlyphDemoDoc *>(GetDocument());
    ASSERT_VALID(pDoc);
    if(nChar < 127){
    //是英文
    }
    else{
    if(ctrl == 0){
      
    a = nChar<<8|nChar&0x0000ffff;
    ctrl++;
    }
    else if(ctrl == 1){
    ctrl--;
    nChar = a<<8|nChar&0x0000ffff;

    }
    }
    }
      

  10.   

    to yugn(小一):unicode 是双字节,不是4字节
      

  11.   

    两字节内码:区号+0xA0 , 位号+0xa0
    如:第一个汉字“啊”的区号为16,位号为01,则其内码为  0xb0,0xa1
    GBK范围:
    1st byte   |  2nd byte
    0x81~0xfe  |  0x40~0x7e and 0x80~0xfe
    BIG5范围:
    1st byte   |  2nd byte
    0x81~0xfe  |  0x40~0x7e and 0xa1~0xfe