如果编码标准为ANSI,则0x00-0x7f都是单字节字符,
如果包含汉字,则每个汉字都为双字节编码:高字节
和低字节,高字节>=0xa1,低字节>=0xa1,你可以据此
判断你是否截断了汉字。

解决方案 »

  1.   

    包含汉字否?如果包含,可以参考如下代码,应该有帮助的:
    //一个包含汉字和字母的字符串,如何逐个输出??
    用如下代码实现:
        char *hz="我是xy你是?";
        CString str(hz);
        CString s1;
        int length=strlen(str);
        for(int i=0;i<length;i++)
        {
            if(((unsigned char*) hz)[i]>0xa0)   //如果是汉字
            {    
                s1=str.Left(2);
                str=str.Mid(2);
                i+=1;
                AfxMessageBox(s1);
                
            }
            else              //非汉字
            {
                s1=str.Left(1);
                str=str.Mid(1);
                AfxMessageBox(s1);
            }
        }
      

  2.   

    api函数int MultiByteToWideChar(
    UINT uCodePage,
    DWORD dwFlags,
    PCSTR pMultiByteStr,
    int cchMultiByte,
    PWSTR pWideCharStr,
    int cchWideChar)
    可以把ansi字符串转换为Unicode字符串,使用步骤:
    1、调用MultiByteToWideChar,pWideCharStr=NULL,cchWideChar=0,此时部转换字符串,返回的是将来转换后的字符串长度
    2、用该长度在此调用该函数,不过先用该长度分配足够的内存。
    转换后再截取。
    方法2:
    出现乱码的原因可能是:截取的开始位置不对,因为单字节和双字节字符混合不能简单的从某一位置开始,
    可以从想截取的位置的前一字节开始
    if(s[i]>=128)j=i-1;
    else j=i;
      

  3.   

    我的代码如下,请帮我修改修改,谢谢
    while(str2.GetLength()>0)
    {
    str1=str2.Left(CUTLENGTH);
    str2=str2.Right(str2.GetLength()-CUTLENGTH);
    m_MessageList.InsertString(-1,str1);//产生乱码
    }
      

  4.   

    Nextchar()/CharNext记不清了,你查查看。