从网络获取的数据都是正确的,经过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>
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>
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); 就可以啦,哇咔咔~~~~~