本帖最后由 VisualEleven 于 2011-12-28 16:56:06 编辑

解决方案 »

  1.   

    那个接受到的时候,本来后面有 10 13 10 13四个字符,strRes.append的时候,没拷贝进去,事实我拷贝进去也是出错.你仔细看Utf8ToWchar里面,空间都是指定长度的,但是转换完,后面就多出了乱码,长度也变了,不知道为什么.
      

  2.   

    memset(temp, '\0', arrLen+1);换成
    memset(temp, '\0', (arrLen+1) * sizeof(wchar_t));试试
      

  3.   

     MultiByteToWideChar(CP_UTF8, 0, a.c_str(), -1, temp, arrLen);
      

  4.   

    你这函数里没几行对的
    CString Utf8ToWchar(string a, int arrLen)

        CString res = _T("");    int len = MultiByteToWideChar(CP_UTF8, 0, a.c_str(), -1, NULL, 0);//应该-1,表示0结尾
        wchar_t *temp = new wchar_t[len + 1];//用计算后的长度len
        char *buf = new char[arrLen + 1];
        memset(buf, '\0', arrLen + 1);
        memset(temp, '\0', (arrLen+1)*sizeof wchar_t);//memset长度是按字节算的,sizeof是操作符,可以不加括号    MultiByteToWideChar(CP_UTF8, 0, a.c_str(), -1, temp, len+1);//注意大小
        WideCharToMultiByte(CP_ACP, 0, temp, -1, buf, arrLen+1, NULL, NULL);
    //    res.Format("%s",temp);
    //    res.ReleaseBuffer();    res.Format("%s",buf);
        delete temp;
        delete buf;
        return res;
    }
      

  5.   

    你说的是对的,我对这些转换还不熟.用你的转换success0确实可以,但是有个问题想问下,arrLen = a.length();为什么len值要比arrLen小呢,arrLen为129,就是a里实际含有的字符的个数,而len才114,还有,buf取arrLen的长度,DEBUG的时候,temp确实转换到了所有字符没错,但是再转到buf里的时候,少了大概3个字符,测试的字符串是";@/2/夏季模式/11:30:00,14:30:00/00:01:00/00:05:00/3@/0,3,5;@/1/春季模式/10:30:00,14:30:00/00:01:00/00:05:00/3@/0,3,50" 结果少了最后的50.请不吝赐教
      

  6.   

    UNICODE每个字符两个字节,UTF8一个汉字2-4字节的
    所以utf8可能会大一些