IHTMLDocument от MHTML: неправильная кодировка после загрузки с URL

#windows #mshtml #ihtmldocument2

#Windows #mshtml #ihtmldocument2

Вопрос:

Веб-страница загружается из Интернета в IHTMLDocument без окон для последующей настройки DOM. Все в порядке, за исключением неправильной кодировки: независимо от кодировки, объявленной на веб-странице в разделе META, свойство charset IHTMLDocument всегда выдает «Windows-1251» сразу после загрузки документа.

Когда я позже записываю измененный документ, файл становится нечитаемым из-за несоответствия кодировки: текст находится в исходной кодировке, тогда как тег META charset в новом документе — «Windows-1251».

Вот код, который я использую для загрузки документа (обработка ошибок и очистка опущены).

     IHTMLDocument2* pDoc = NULL;
    CoCreateInstance(CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER, 
            IID_IHTMLDocument2, (void**)amp;pDoc);

    IMoniker* pIMoniker = NULL;
    CreateURLMonikerEx(NULL, path.c_str(), amp;pIMoniker, URL_MK_UNIFORM);

    IPersistMoniker* pPMk= NULL;
    pDoc->QueryInterface(IID_IPersistMoniker, (void **)amp;pPMk);

    IBindCtx *pBCtx = NULL;
    CreateBindCtx(0, amp;pBCtx);

    pPMk->Load(FALSE, pIMoniker, pBCtx, STGM_READ|STGM_SHARE_EXCLUSIVE);
  

Почему неправильная кодировка и как мне ее исправить? Спасибо.

Комментарии:

1. Почему он был сохранен с неправильной кодировкой?

Ответ №1:

Проблема решена путем перевода IHTMLDocument в режим разработки перед загрузкой:

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

Кодировка установлена сразу после этого изменения. (Но почему?..)