PDA

Просмотр полной версии : Задание кодировки в WebBrowsere



Duncon
01.01.2005, 21:09
Как задать определенную кодировку для WebBrowserа, чтобы он
работал только с ней при просмотре страниц?( к примеру Unicode(UTF-8))
И еще как задать кодировку отображения и записи в Memo

Naeel Maqsudov
18.01.2005, 01:08
Кодировку надо указывать в самих страницах.

Посмотрите методы из интерфейса IHTMLDocument2 (см Mshtml.pas в C:\Program Files\Borland\Delphi5\Source\Internet)

Возможно что-то типа....


var
doc: IHTMLDocument2;
begin
doc:=WebBrowser1.Document;
doc.Set_defaultCharset(...)
end;

... но я не уверен.

В TMemo никак. Только перекодировать в Win1251.
Можно еще использовать шрифт, в котором символы расположены в соответствии с нужной страницей.

AiK
18.01.2005, 02:31
Кодировку надо указывать в самих страницах.
Не совсем верное решение. Дело в том, что по протоколу HTTP/1.1 сервер может отослать документ именно в той кодировке, которую ожидает браузер. Т.е. документ на сервере может храниться в KOI-8, а клиенту (то бишь браузеру) передавать его в Windows-1251, осуществляя перекодировку на лету. Если при этом сервер забудет в заголовках HTTP ответа указать кодировку (случается при неверной настройке сервера довольно часто), то браузер будет введён в заблуждение указанием кодировки KOI8-r. Впрочем, сей факт слабо утешает - браузер может направляться на неподконтрольные веб-сервера.


doc.Set_defaultCharset
На сколько я помню, это не работает. И, если я правильно понимаю, вот по какой причине: дело в том, что при создании документа используется значение дефолтной кодовой страницы из настроек IE. А от TWebBrowser'а мы документ получаем только после того, как он распарсен с уже установленным defaultCharset. Если посмотреть на поведение IE при смене кодировки, то видно, что он по новой парсит документ. Возможно, поможет такое решение: создать новый пустой документ, указать ему нужную дефолтную кодировку и заставить его распарсить HTML предварительно сохранённый из предыдущего документа. Методы на вскидку не вспомню, MSDN'a под рукой нет, а в Google искать лень. Что-то вроде loadfromstring или parse...

Duncon
18.01.2005, 13:20
Спасибо за мучение мозга. К сожалению, задать только 1 конкретную кодировку так и не получилось,
оставим это на совести разработчиков Delphi.
Да, к вопросу,,, уже неделю юзаю Delphi 2005(AE) - Просто супер, дизайн просто мега удобный,
Дофига новых возможностей, более ли менее нормальный help с несколькими языками,
а еще обещают в скором времени возможность работы и с Cи до кучи!!!