CHttpFile ReadString如何接收UTf8字符中文字符,我接收的全是乱码?怎么解决?(WIN7 64 VS2008 MFC 多字节字符集)

时间:2021-10-14 06:39:39

if (dwRet == HTTP_STATUS_OK){
/*CString strHtml=_T("");
CString pData;
TCHAR sRecived[10*1024];
while(pFile->ReadString(pData) != NULL)
{
char * pStr = pData.GetBuffer(pData.GetLength());//获取原始字符串        
int szBuf = MultiByteToWideChar(CP_UTF8,0,pStr,-1,NULL,0);//获取需要多少缓存 
wchar_t * pBuf = new wchar_t[szBuf * sizeof(wchar_t)];//申请缓存空间        
MultiByteToWideChar(CP_UTF8,0,pStr,-1,pBuf,szBuf * sizeof(wchar_t));//转码        
strHtml += pBuf;         
delete [] pBuf; 
}*/
char strBuff[1025]={0};
string strHtml; //是string 不是CString
while ((pFile->Read((void*)strBuff, 1024)) > 0)
{
strHtml += strBuff;
}
// _cprintf(" 读取内容结束...");

int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, strHtml.c_str(), -1, NULL, 0);
WCHAR *pUnicode = new WCHAR[unicodeLen + 1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8,0,strHtml.c_str(),-1, pUnicode,unicodeLen);
CString str(pUnicode); //
  AfxMessageBox (str) ;

delete []pUnicode;
}  

































6 个解决方案

#1


弄了两天了,还是没有好。

#2


哪位高手能帮帮忙啊?

#3


不是高手,也来掺和下。
  发送端是windows吗?
  发送纯英文和数字字符,接收是乱码吗?
  发送中文,抓包看看发送内容是否正确?有个tcpmon263可以很简易地抓包。

#4


/**********************************************************************/
//先转换成宽字节,再转换成UTF_8
int nLengthNeeded = MultiByteToWideChar(CP_ACP,0,strBuff,-1,NULL,0);
wchar_t *PWCMessage = new wchar_t[nLengthNeeded + 1];
MultiByteToWideChar(CP_ACP,0,strBuff,-1,PWCMessage,nLengthNeeded);
nLengthNeeded = WideCharToMultiByte(CP_UTF8, 0, PWCMessage, -1, NULL, 0, NULL, NULL); 
char * str2 = new char[nLengthNeeded + 1];
WideCharToMultiByte(CP_UTF8, 0, PWCMessage, -1, str2, nLengthNeeded, NULL, NULL);
//转换后的字符串保存在str2中
/************************************************************************/

#5


不是上面的问题,是请求头的内容有问题,我自已经解决,不过还是谢谢!!

#6


请问是怎么解决的啊?
我也碰到这样的问题了

#1


弄了两天了,还是没有好。

#2


哪位高手能帮帮忙啊?

#3


不是高手,也来掺和下。
  发送端是windows吗?
  发送纯英文和数字字符,接收是乱码吗?
  发送中文,抓包看看发送内容是否正确?有个tcpmon263可以很简易地抓包。

#4


/**********************************************************************/
//先转换成宽字节,再转换成UTF_8
int nLengthNeeded = MultiByteToWideChar(CP_ACP,0,strBuff,-1,NULL,0);
wchar_t *PWCMessage = new wchar_t[nLengthNeeded + 1];
MultiByteToWideChar(CP_ACP,0,strBuff,-1,PWCMessage,nLengthNeeded);
nLengthNeeded = WideCharToMultiByte(CP_UTF8, 0, PWCMessage, -1, NULL, 0, NULL, NULL); 
char * str2 = new char[nLengthNeeded + 1];
WideCharToMultiByte(CP_UTF8, 0, PWCMessage, -1, str2, nLengthNeeded, NULL, NULL);
//转换后的字符串保存在str2中
/************************************************************************/

#5


不是上面的问题,是请求头的内容有问题,我自已经解决,不过还是谢谢!!

#6


请问是怎么解决的啊?
我也碰到这样的问题了