IHTMLDocument в MHTML: неверная кодировка после загрузки с URL
Веб-страница загружается из Интернета в IHTMLDocument без окон для будущей настройки DOM. Все хорошо, за исключением того, что кодировка неправильна: независимо от того, какая кодировка объявлена на веб-странице в разделе META, свойство charset в IHTMLDocument всегда выдает "Windows-1251" сразу после загрузки документа.
Когда я позже записываю измененный документ, файл не читается из-за несоответствия кодировки: текст в исходной кодировке, в то время как тег charset 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);
Почему неправильная кодировка, и как мне сделать это правильно? Благодарю.
1 ответ
Проблема решена путем перевода IHTMLDocument в режим разработки перед загрузкой:
hr = pDoc->put_designMode(L"On");
Кодировка сразу после этой модификации. (Но почему?..)