从网络获取的数据都是正确的,经过WideCharToMultiByte后就出现了部分乱码。   CStdioFile xmlFile(_T("Data.xml"),CFile::modeCreate|CFile::modeWrite);
   wchar_t buf[200]; 
   int strLast=0;
   do{
        memset(buf,0,200*sizeof(wchar_t));
        strLast=recv(theSocket,(char*)buf,200*sizeof(wchar_t),0);
        if(strLast<=0)
        {
            break;
        }   
        //获取的 buf 中的内容是正确的。 
        DWORD charLen=WideCharToMultiByte(CP_UTF8,0,buf,-1,NULL,0,NULL,FALSE);
        char* MutiByteBuf;
        MutiByteBuf=new char[charLen];
        WideCharToMultiByte(CP_UTF8,0,buf,-1,MutiByteBuf,charLen,NULL,NULL);        
        //从第二次循环开始,都会出现部分乱码。
        xmlFile.Write(MutiByteBuf,charLen);
        delete [] MutiByteBuf;
   }while(strLast>0);
   xmlFile.Close();被 WideCharToMultiByte 处理后得到的XML文件,存在部分乱码。<NewDataSet>  <paraDepartment>    <paraDepartmentId>1</paraDepartmentId>    <paraDepartmentName>A系</paraDepartmentName>    <lotClsId>2</lotClsId>    <paraDepartmentDesc>啊系</paraDepartmentDes쳌쳌쳌쳌䇔砮໰ c>  </paraDepartment>  <paraDepartment>    <paraDepartmentId>2</paraDepartmentId>    <paraDepartmentName>B系</paraDepartmentName>    <lotClsId>2</lotClsId>    <paraDepartmentDesc>B系</paraDe쳌쳌쳌쳌䇔砮໰ partmentDesc>  </paraDepartment>  <paraDepartment>    <paraDepartmentId>3</paraDepartmentId>    <paraDepartmentName>fA系</paraDepartmentName>    <lotClsId>1</lotClsId>    <paraDepartmentDes쳌쳌쳌쳌䇔砮໰ c>fA系的</paraDepartmentDesc>  </paraDepartment>  <paraDepartment>    <paraDepartmentId>4</paraDepartmentId>    <paraDepartmentName>fB系</paraDepartmentName>    <lotClsId>1</lotClsId>    <par쳌쳌쳌쳌䇔砮໰ aDepartmentDesc>D系的</paraDepartmentDesc>  </paraDepartment>  <paraDepartment>    <paraDepartmentId>7</paraDepartmentId>    <paraDepartmentName>D系</paraDepartmentName>    <lotClsId>2</lotClsI쳌쳌쳌쳌䇔砮໰ d>    <paraDepartmentDesc>B系的</paraDepartmentDesc>  </paraDepartment>  <paraDepartment>    <paraDepartmentId>8</paraDepartmentId>    <paraDepartmentName>fC系</paraDepartmentName>    <lotCls쳌쳌쳌쳌䇔砮໰ Id>1</lotClsId>    <paraDepartmentDesc>注定要被删除的</paraDepartmentDesc>  </paraDepartment>  <paraDepartment>    <paraDepartmentId>11</paraDepartmentId>    <paraDepartmentName>DNA系</paraDepartmen쳌쳌쳌쳌䇔砮໰ tName>    <lotClsId>1</lotClsId>    <paraDepartmentDesc>使用遗传算法对该数据进行了独到的分析。</paraDepartmentDesc>  </paraDepartment></NewDataSet> 实际传输过来的XML数据文件<NewDataSet>
  <paraDepartment>
    <paraDepartmentId>1</paraDepartmentId>
    <paraDepartmentName>A系</paraDepartmentName>
    <lotClsId>2</lotClsId>
    <paraDepartmentDesc>啊系</paraDepartmentDesc>
  </paraDepartment>
  <paraDepartment>
    <paraDepartmentId>2</paraDepartmentId>
    <paraDepartmentName>B系</paraDepartmentName>
    <lotClsId>2</lotClsId>
    <paraDepartmentDesc>B系</paraDepartmentDesc>
  </paraDepartment>
  <paraDepartment>
    <paraDepartmentId>3</paraDepartmentId>
    <paraDepartmentName>fA系</paraDepartmentName>
    <lotClsId>1</lotClsId>
    <paraDepartmentDesc>fA系的</paraDepartmentDesc>
  </paraDepartment>
  <paraDepartment>
    <paraDepartmentId>4</paraDepartmentId>
    <paraDepartmentName>fB系</paraDepartmentName>
    <lotClsId>1</lotClsId>
    <paraDepartmentDesc>D系的</paraDepartmentDesc>
  </paraDepartment>
  <paraDepartment>
    <paraDepartmentId>7</paraDepartmentId>
    <paraDepartmentName>D系</paraDepartmentName>
    <lotClsId>2</lotClsId>
    <paraDepartmentDesc>B系的</paraDepartmentDesc>
  </paraDepartment>
  <paraDepartment>
    <paraDepartmentId>8</paraDepartmentId>
    <paraDepartmentName>fC系</paraDepartmentName>
    <lotClsId>1</lotClsId>
    <paraDepartmentDesc>注定要被删除的</paraDepartmentDesc>
  </paraDepartment>
  <paraDepartment>
    <paraDepartmentId>11</paraDepartmentId>
    <paraDepartmentName>DNA系</paraDepartmentName>
    <lotClsId>1</lotClsId>
    <paraDepartmentDesc>使用遗传算法对该数据进行了独到的分析。</paraDepartmentDesc>
  </paraDepartment>
</NewDataSet>

解决方案 »

  1.   

    关于这个函数,我也看过MSDN了的,感觉应该是长度的问题,但是不确定,希望各位帮帮忙。小弟我初学~~谢谢了。
      

  2.   

    终于搞定了,来个人接分~~        DWORD charLen=WideCharToMultiByte(CP_UTF8,0,buf,-1,NULL,0,NULL,FALSE);
            char* MutiByteBuf;
            MutiByteBuf=new char[charLen];
            WideCharToMultiByte(CP_UTF8,0,buf,-1,MutiByteBuf,charLen,NULL,NULL); 改成        DWORD charLen=WideCharToMultiByte(CP_UTF8,0,buf,strLast/2,NULL,0,NULL,FALSE);
            char* MutiByteBuf;
            MutiByteBuf=new char[charLen];
            WideCharToMultiByte(CP_UTF8,0,buf,strLast/2,MutiByteBuf,charLen,NULL,NULL); 就可以啦,哇咔咔~~~~~