IWinHttpRequest获取网页内容乱码

客户端向Web服务器Send()之后,就可以等待接收服务器Response的消息体

如果目标网站是GBK编码 无论是下面的哪种方法接收到的消息体的中文字符都是乱码: 

IWinHttpRequestPtr pHttpReq;

方法一:

_bstr_t strResponse= pHttpReq->ResponseText;

CString strText = strResponse;

CString strText = (LPCTSTR)_com_util::ConvertBSTRToString(strResponse);

方法二:

BSTR bstr = NULL;

hr = pHttpReq->get_ResponseText(&bstr);

CString str = bstr;

dedecms就是典型的gbk编码

图示如下

28.png

那么这里就涉及编码转换的问题 

网上摘抄过来的

_variant_t varRspBody = httpRequest->GetResponseBody();
ULONG dataLen = varRspBody.parray->rgsabound[0].cElements; // 文本长度
char *pContentBuffer = (char*)varRspBody.parray->pvData;
CString rspStr;
rspStr = pContentBuffer;
MessageBox(rspStr);

但是据我看的话
IWinHttpRequest:: 里面有一个属性是ResponseBody 并没有发现什么GetResponseBody()

HRESULT get_ResponseBody(
  [out, retval]  VARIANT *Body
);

据测试 使用属性这种方式也是可以正常显示GBK编码的数据
_variant_t varRspBody = httpRequest->ResponseBody;
ULONG dataLen = varRspBody.parray->rgsabound[0].cElements; // 文本长度
char *pContentBuffer = (char*)varRspBody.parray->pvData;
CString rspStr;
rspStr = pContentBuffer;
MessageBox(rspStr);

效果如下

7.png

 

但是这种方式访问Unicode字符集网站的话仍然是乱码,特意测试了下

3.png

所以说要针对性的使用对应的解决方案,字符乱码转换问题还是让人摸不清头脑

本博客所有文章如无特别注明均为原创。作者:odaycaogen复制或转载请以超链接形式注明转自 123``blog
原文地址《IWinHttpRequest获取网页内容乱码

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(1)

学习了
知识共享网 4个月前(05-18) 回复