在无窗口的IHTMLDocument中从Internet加载网页,以便将来调整DOM。一切都很好,除了charset是错误的:无论在META部分的网页中公布的字符集,IHTMLDocument的charset属性在加载文档后立即变成“Windows-1251”。
当我稍后将修改过的文档写出来时,由于编码不匹配,文件无法读取:文本采用原始编码,而新文档中的META字符集标记为“Windows-1251”。
这是我用来加载文档的代码(省略了错误处理和清理)。
IHTMLDocument2* pDoc = NULL;
CoCreateInstance(CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER,
IID_IHTMLDocument2, (void**)&pDoc);
IMoniker* pIMoniker = NULL;
CreateURLMonikerEx(NULL, path.c_str(), &pIMoniker, URL_MK_UNIFORM);
IPersistMoniker* pPMk= NULL;
pDoc->QueryInterface(IID_IPersistMoniker, (void **)&pPMk);
IBindCtx *pBCtx = NULL;
CreateBindCtx(0, &pBCtx);
pPMk->Load(FALSE, pIMoniker, pBCtx, STGM_READ|STGM_SHARE_EXCLUSIVE);
为什么编码错误,我该怎么做?感谢。
答案 0 :(得分:0)
在加载之前将IHTMLDocument置于设计模式中解决了问题:
hr = pDoc->put_designMode(L"On");
此修改后编码正好。 (但为什么?..)