紧急求援:BSTR乱码

everywhen 2012-05-24 02:20:46
本人VC新手,最近在学习写BHO.

其中需要用到读取一个UTF8编码的网页a.html的内容,并将其作为一个DIV的innerHTML插入到另外一个utf8编码的网页b.html中.

目前我可以取得a中的数据, (取得的内容存在char*变量中).也实现了向B中插入DIV,但a.html中有中文时就会乱码.

如:

char * content = requestUrl("http://www.baidu.com"); //requestUrl()为自定义函数,返回值为char *.
........


hr = spDoc.createElement(CComBSTR("div"),&spDiv);

CComQIPtr <IHTMLDOMNode,IID_IHTMLDOMNode> pDivNode(spDiv);

if (pDivNode!=NULL) {
spBody->appendChild(pDivNode,NULL);
pDivNode->put_innerHTML(CComVariant(content));
}

结果网页B中显示乱码,或是只有"中文内容"前面的文字


求解决方案.
...全文
286 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
happytengfei 2012-06-30
  • 打赏
  • 举报
回复
建议楼主debug一下pDivNode->put_innerHTML(CComVariant(content));CComVariant会把content内容转成BSTR类型(wchar),不管content是char,还是wchar; 所以可以在put_innerHTML方法中,把CComVariant中的内容取出来,查看一下里面的中文是否是乱码.
zhengning34 2012-06-30
  • 打赏
  • 举报
回复
网页的编码方式和mfc activex的不一样。一定要注意,不能乱用数据类型。
fishion 2012-05-24
  • 打赏
  • 举报
回复
是不是你的网页没添加支持中文了?
everywhen 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 6 楼 的回复:

二楼提供的方法你看了么


看了,不行啊
[/Quote]
是这样么?
wcsLen = ::WideCharToMultiByte(CP_ACP, NULL, pop, strlen(pop), NULL, 0,NULL,NULL);

wchar_t* wszString1 = new wchar_t[wcsLen + 1];
::WideCharToMultiByte(CP_ACP, NULL, pop, strlen(pop), wszString1, wcsLen,NULL,NULL);
wszString1[wcsLen] = '\0';
everywhen 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

二楼提供的方法你看了么
[/Quote]

看了,不行啊
向立天 2012-05-24
  • 打赏
  • 举报
回复
二楼提供的方法你看了么
everywhen 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

全部使用unicode的,然后再转成utf-8格式,不要用char*
[/Quote]

能具体点吗?
fishion 2012-05-24
  • 打赏
  • 举报
回复
全部使用unicode的,然后再转成utf-8格式,不要用char*
everywhen 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

调用MultiByteToWideChar接口先将content装成UTF8字符串,然后把刚转换好的UTF8字符串传入put_innerHTML接口中,不知道这样行不行,可以试下
[/Quote]

试过,不行,CP_UTF8/CP_ACP都不行. 我的工程是unicode的
快乐鹦鹉 2012-05-24
  • 打赏
  • 举报
回复
http://blog.csdn.net/muzizongheng/article/details/4675651
ytht8484 2012-05-24
  • 打赏
  • 举报
回复
调用MultiByteToWideChar接口先将content装成UTF8字符串,然后把刚转换好的UTF8字符串传入put_innerHTML接口中,不知道这样行不行,可以试下

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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