免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9355 | 回复: 2
打印 上一主题 下一主题

[C++] 求助,用CHttpFile::ReadString函数读取网页还是出现中文乱码,我已经进行编码转换 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-13 23:33 |只看该作者 |倒序浏览
本帖最后由 lwwworkspace 于 2011-08-13 23:36 编辑

IDE: VS2005
先贴个转换代码
调用:
  1. while(pHttpFile->ReadString(strBuff)) {
  2.                                 Convert(strBuff, CP_UTF8, CP_ACP);
  3.                         }
复制代码
  1. void Convert(CString& str, int sourceCodePage, int targetCodePage)
  2. {
  3.         int iUnicodeLen = MultiByteToWideChar(sourceCodePage, 0, (LPCSTR)str.GetBuffer(), -1, NULL, 0);
  4.         wchar_t *pUnicode = NULL;
  5.         pUnicode = new wchar_t[iUnicodeLen + 1];

  6.         memset(pUnicode, 0, (iUnicodeLen + 1) * sizeof(wchar_t));
  7.         MultiByteToWideChar(sourceCodePage, 0, (LPCSTR)str.GetBuffer(), -1, (LPWSTR)pUnicode, iUnicodeLen);

  8.         BYTE *pTargetData = NULL;
  9.         int iTargetLen = WideCharToMultiByte(targetCodePage, 0, (LPWSTR)pUnicode, -1, (char*)pTargetData, 0, NULL, NULL);
  10.         pTargetData = new BYTE[iTargetLen + 1];

  11.         memset(pTargetData, 0, iTargetLen + 1);
  12.         WideCharToMultiByte(targetCodePage, 0, (LPWSTR)pUnicode, -1, (char*)pTargetData, iTargetLen, NULL, NULL);
  13.         CString strFormatTargetData;
  14.         strFormatTargetData.Format(_T("%s"), pTargetData);

  15.         delete[] pTargetData;
  16.         delete[] pUnicode;
  17.         pTargetData        = NULL;
  18.         pUnicode        = NULL;
  19. }
复制代码
如果直接显示pUnicode,html内容只有中文会乱码显示不出来,其他都正常,但是通过strFormatTargetData格式化后的数据,就又全部乱码了,求大虾指导,谢谢。)

论坛徽章:
0
2 [报告]
发表于 2011-08-14 08:00 |只看该作者
怎么没有人回答我呀。。。。。。。。。求救。。。。。

论坛徽章:
0
3 [报告]
发表于 2011-08-14 09:00 |只看该作者
问题解决了。原来参数搞反了,正确调用为Convert(strBuff, CP_ACP);
  1. BYTE *pTargetData = NULL;
  2.         int iTargetLen = WideCharToMultiByte(targetCodePage, 0, (LPWSTR)pUnicode, -1, (char*)pTargetData, 0, NULL, NULL);
  3.         pTargetData = new BYTE[iTargetLen + 1];

  4.         memset(pTargetData, 0, iTargetLen + 1);
  5.         WideCharToMultiByte(targetCodePage, 0, (LPWSTR)pUnicode, -1, (char*)pTargetData, iTargetLen, NULL, NULL);
  6.         CString strFormatTargetData;
  7.         strFormatTargetData.Format(_T("%s"), pTargetData);
复制代码
这段代码没有必要了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP