0

网页从 Internet 加载到无窗口的 IHTMLDocument 中,以供将来调整 DOM。一切都很好,除了 charset 错误:无论 META 部分的网页中宣传的 charset 是什么,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);

为什么编码错误,我该如何使它正确?谢谢。

4

1 回答 1

0

通过在加载之前将 IHTMLDocument 置于设计模式解决了问题:

hr = pDoc->put_designMode(L"On");   

编码就在此修改之后。(但为什么?..)

于 2011-04-09T14:29:39.530 回答