VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 755|回复: 4

[求助] 响应头文本转码问题

[复制链接]
20_avatar_middle
在线会员 发表于 2016-7-10 09:45:33 | 显示全部楼层 |阅读模式
5驿站币
#define Get_WinHttp_RspString(IWinHttpRequestPtr_Obj, CString_Obj){ \
        _variant_t varRspBody = IWinHttpRequestPtr_Obj->GetResponseBody(); \
        ULONG dataLen = varRspBody.parray->rgsabound[0].cElements; \
        char *pContentBuffer = (char *)varRspBody.parray->pvData; \
        CString_Obj = pContentBuffer;}


我按照教程上的这段宏  得到的文本不是真正的响应头信息  显示的是 ‘字符串中的字符无效 ’   求解决方案   响应头文本格式UTF8格式  请问如何得到不是乱码的中文文本  谢谢





上一篇:请解释一下意思
下一篇:CFile类写出CSting类
51_avatar_middle
online_admins 发表于 2016-7-11 16:57:59 | 显示全部楼层
如果编码的问题的话就不能直接用这个头了,先得到 pContentBuffer 和 dataLen,之后进行 UTF8 -> GBK 的转码,这样就可以看到明文了

评分

参与人数 1驿站币 +1 收起 理由
20_avatar_small 祸起蛋炒饭 + 1

查看全部评分

20_avatar_middle
ico_lz  楼主| 发表于 2016-7-11 18:58:29 | 显示全部楼层
Syc 发表于 2016-7-11 16:57
如果编码的问题的话就不能直接用这个头了,先得到 pContentBuffer 和 dataLen,之后进行 UTF8 -> GBK 的转 ...

多谢老大指点   不过我已经知道我哪儿的问题了 那个是因为gzip压缩   需要进行gzip解压
20_avatar_middle
ico_lz  楼主| 发表于 2016-7-12 20:45:59 | 显示全部楼层
本帖最后由 祸起蛋炒饭 于 2016-7-12 21:06 编辑
Syc 发表于 2016-7-11 16:57
如果编码的问题的话就不能直接用这个头了,先得到 pContentBuffer 和 dataLen,之后进行 UTF8 -> GBK 的转 ...


老大  帮帮忙哈
  1. int CMainDlg::httpgzdecompress(BYTE *zdata, ULONG nzdata, BYTE *data, ULONG *ndata)
  2. {
  3.         int err = 0;
  4.         z_stream d_stream = {};
  5.         static char dummy_head[2] =
  6.         {
  7.                 0x8 + 0x7 * 0x10,
  8.                 (((0x8 + 0x7 * 0x10) * 0x100 + 30) / 31 * 31) & 0xFF,
  9.         };

  10.         d_stream.zalloc = (alloc_func)0;
  11.         d_stream.zfree = (free_func)0;
  12.         d_stream.opaque = (voidpf)0;
  13.         d_stream.next_in = zdata;
  14.         d_stream.avail_in = 0;
  15.         d_stream.avail_out = 0;
  16.         d_stream.next_out = data;
  17.         if (inflateInit2(&d_stream, 47) != Z_OK) return -1;
  18.         while (d_stream.total_out < *ndata && d_stream.total_in < nzdata)
  19.         {
  20.                 d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */
  21.                 if ((err = inflate(&d_stream, Z_NO_FLUSH)) == Z_STREAM_END)
  22.                         break;
  23.                 if (err != Z_OK)
  24.                 {
  25.                         if (err == Z_DATA_ERROR)
  26.                         {
  27.                                 d_stream.next_in = (Bytef*)dummy_head;
  28.                                 d_stream.avail_in = sizeof(dummy_head);
  29.                                 if ((err = inflate(&d_stream, Z_NO_FLUSH)) != Z_OK)
  30.                                 {
  31.                                         return -1;
  32.                                 }
  33.                         }
  34.                         else return -1;
  35.                 }
  36.         }
  37.         if (inflateEnd(&d_stream) != Z_OK) return -1;
  38.         *ndata = d_stream.total_out;
  39.         if (d_stream.total_in != nzdata)
  40.                 err = Z_BUF_ERROR;
  41.         return err;
  42. }
复制代码


这个是我从网上看的代码  其实功能貌似没错  但是哦 最后显示的结果最后成了个省略号  没有显示完全   但是我把那个输出文本的指针保存到文本   却是完整的内容   有劳老大给指点一下
20_avatar_middle
ico_lz  楼主| 发表于 2016-7-13 11:01:33 | 显示全部楼层
祸起蛋炒饭 发表于 2016-7-12 20:45
老大  帮帮忙哈

这个是我从网上看的代码  其实功能貌似没错  但是哦 最后显示的结果最后成了个省略 ...

问题我已处理好了  
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-5-23 03:50

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表