IWinHttpRequestPtr 获取响应文本乱码不显示问题 求救决方案

祸起蛋炒饭 2016-07-10 03:15:03
_variant_t varRspBody = m_pHttpReq->GetResponseBody();
ULONG dataLen = varRspBody.parray->rgsabound[0].cElements;
char *pContentBuffer = (char *)varRspBody.parray->pvData;

出阿宝获取的响应头 文本格式为utf8格式,我调用这个函数 结果pContentBuffer显示的是“<字符串中的字符无效。>”
而我在用fidller抓包过程中显示响应内容是需要decode才能显示正常的文本 若不然也是看不懂的乱码,, 求一个解决方案
...全文
334 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
encoderlee 2016-07-10
  • 打赏
  • 举报
回复

std::wstring UTF8_To_UTF16(const std::string &source)
{
	unsigned long len = ::MultiByteToWideChar(CP_UTF8, NULL, source.c_str(), -1, NULL, NULL);
	if (len == 0)
		return std::wstring();
	wchar_t *buffer = new wchar_t[len];
	::MultiByteToWideChar(CP_UTF8, NULL, source.c_str(), -1, buffer, len);
	
	std::wstring dest(buffer);
	delete [] buffer;
	return dest;
}

std::string UTF8_To_GBK(const std::string &source)
{
	enum {GB2312 = 936};

	unsigned long len = ::MultiByteToWideChar(CP_UTF8, NULL, source.c_str(), -1, NULL, NULL);
	if (len == 0)
		return std::string();
	wchar_t *wide_char_buffer = new wchar_t[len];
	::MultiByteToWideChar(CP_UTF8, NULL, source.c_str(), -1, wide_char_buffer, len);
	
	len = ::WideCharToMultiByte(GB2312, NULL, wide_char_buffer, -1, NULL, NULL, NULL, NULL);
	if (len == 0)
	{
		delete [] wide_char_buffer;
		return std::string();
	}
	char *multi_byte_buffer = new char[len];
	::WideCharToMultiByte(GB2312, NULL, wide_char_buffer, -1, multi_byte_buffer, len, NULL, NULL);
	
	std::string dest(multi_byte_buffer);
	delete [] wide_char_buffer;
	delete [] multi_byte_buffer;
	return dest;
}
encoderlee 2016-07-10
  • 打赏
  • 举报
回复
如果是utf8编码问题,可以用MultiByteToWideChar转换为Unicode,就不乱码显示了。
renwotao2009 2016-07-10
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/320095332中3楼老邓的回答

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧