紧急求援: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中显示乱码,或是只有"中文内容"前面的文字


求解决方案.
...全文
212 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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接口中,不知道这样行不行,可以试下
回复
相关推荐
发帖
ATL
创建于2007-09-28

3218

社区成员

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
申请成为版主
帖子事件
创建了帖子
2012-05-24 02:20
社区公告
暂无公告