MFC POST 请求数据中文乱码

我POST中文后用服务器后台看中文是乱码的,数字和英文是没问题的。我转码也不管事,要疯了!!!求大神来告知一二~~~

3个回答

是取数据看到中文乱码吗?编码一般设置为UTF-8

xuebing1995
离水的鱼儿 回复向大佬低头: 怎么设置?Conten-Type :application/x-www-form-urlencode;charset-utf-8 这个?
2 年多之前 回复
qq_23126581
渊渟无迹静涛君 回复离水的鱼儿: 在dopost里将编码设置成UTF-8
2 年多之前 回复
xuebing1995
离水的鱼儿 不是取数据,是上传数据,我取数据一开始中文也是乱码,后来我转码了就正常了,这上传的怎么转都还是乱码,我都晕了~~~
2 年多之前 回复

后台,以及前台编码都要设置成UTF-8.

xuebing1995
离水的鱼儿 我后台肯定是UTF-8的,我用的是vs2012,使用的是多字符集编码,而且我也转了UTF-8(不知是否正确), 但是同样的接收数据我转UTF-8就可以成功,所以传数据我转的应该也没问题的。代码我贴出来吧,后台的肯定没问题
2 年多之前 回复

// HttpClient.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
// #include "emailsenderv2.h"

#include "HttpClient.h"

#ifdef DEBUG

#undef THIS_FILE

static char THIS_FILE[]=
_FILE__;

#define new DEBUG_NEW

#endif

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

CHttpClient::CHttpClient()

{

}

CHttpClient::~CHttpClient()

{

}

CString CHttpClient::doGet(CString href)

{

CString httpsource=""; //接收http返回的数据
CInternetSession session1(NULL,0);

CHttpFile* pHTTPFile=NULL;

try{

pHTTPFile=(CHttpFile*)session1.OpenURL(href);

//session1.

}catch(CInternetException){

pHTTPFile=NULL;

}

if(pHTTPFile)

{

CString text;

for(int i=0;pHTTPFile->ReadString(text);i++)

{

httpsource=httpsource+text+"/r/n";

}

pHTTPFile->Close();

delete pHTTPFile;

}else

{

}  

//将返回的数据转换成UTF-8格式
LPSTR pszOutBuffer=httpsource.GetBuffer();
httpsource.ReleaseBuffer();//释放缓存

wchar_t *pwtext=NULL;
DWORD dwNum=MultiByteToWideChar(CP_ACP,0,pszOutBuffer,-1,NULL,0);//返回底ASCII码的字符数目
pwtext=new wchar_t[dwNum];              //根据ASCII码的字符数分配UTF8的空间
MultiByteToWideChar(CP_UTF8,0,pszOutBuffer,-1,pwtext,dwNum);    //将ASCII码抓换成UTF-8

httpsource=pwtext;

return   httpsource;   //返回utf8格式http数据

}

//post提交方式
CString CHttpClient::doPost(CString href)

{

CString httpsource="";

CInternetSession session1;

CHttpConnection* conn1=NULL;

CHttpFile* pFile = NULL;

CString strServerName;

CString strObject;

INTERNET_PORT nPort;

DWORD dwServiceType;

AfxParseURL((LPCTSTR)href,dwServiceType, strServerName, strObject, nPort);

DWORD retcode;

char* outBuff = CONTENT.GetBuffer(1000);
CString strHeaders="";

try       
{                   
    conn1   =   session1.GetHttpConnection(strServerName,nPort);           
    pFile   =   conn1->OpenRequest(0,strObject,NULL,1,NULL,"HTTP/1.1",INTERNET_FLAG_EXISTING_CONNECT|INTERNET_FLAG_NO_AUTO_REDIRECT);         
    pFile   ->   AddRequestHeaders("Content-Type: application/x-www-form-urlencoded");  
    // 
    pFile   ->   AddRequestHeaders("Accept:   */*");  
    //pFile ->   AddRequestHeaders("Accept-Language:zh-cn");
    //pFile ->   AddRequestHeaders("Accept-Encoding:gzip,deflate");
    //pFile   ->   SendRequest(NULL,0,text,dwNum1+1);     
    pFile   ->   SendRequest(NULL,0,outBuff,strlen(outBuff)+1);               
    pFile   ->   QueryInfoStatusCode(retcode);                   
}                             
catch   (CInternetException   *   e)
{
    DWORD dwError=e->m_dwError;
};                   
if(pFile)   
{   
    CString   text;   
    for(int   i=0;pFile->ReadString(text);i++)   
    {   
        httpsource=httpsource+text+"/r/n";   
    }   
    pFile->Close();   
}else   
{   

}   

/*LPSTR pszOutBuffer=httpsource.GetBuffer();
httpsource.ReleaseBuffer();//释放缓存*/

wchar_t *pwtext=NULL;
DWORD dwNum=MultiByteToWideChar(CP_ACP,0,httpsource,-1,NULL,0);//返回底ASCII码的字符数目
pwtext=new wchar_t[dwNum];              //根据ASCII码的字符数分配UTF8的空间
MultiByteToWideChar(CP_UTF8,0,httpsource,-1,pwtext,dwNum);  //将ASCII码转换成UTF-8

httpsource=pwtext;


return   httpsource;   //返回utf8格式http数据
delete   pFile;           
delete   conn1;           
session1.Close();   

}

void CHttpClient::addParam(CString name, CString value)

{

names.AddTail((LPCTSTR)name);

values.AddTail((LPCTSTR)value);

CString eq="=";

CString an="&";

CONTENT=CONTENT+name+eq+value+an;

CL=CONTENT.GetLength();

}

int main(void)
{

CHttpClient http;
CString data="沈雪冰";


wchar_t *pwtext=NULL;
DWORD num=MultiByteToWideChar(CP_ACP,0,data,-1,NULL,0);
pwtext=new wchar_t[num];
MultiByteToWideChar(CP_UTF8,0,data,-1,pwtext,num);
data=pwtext;


CString result;
http.addParam("data",data);
result=http.doPost("http://192.168.0.115:8080/Struts2hello/helloworld.action");
printf("%s\n",result);
getchar();

return 0;

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问