Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Twebbrowser+IIHTMLDocument2 парсинг + innerhtml ? [D7, XP]


vegarulez ©   (2015-09-16 07:20:00) 

Привет всем мастерам!
Вопрос заключается вот в чем - хочу с локальной машины загружать шаблон html документа в IIHTMLDocument2 потом добавлять нужные мне строки и отображать в Twebbrowser.

Начинаем с первого.
1.создал документ в кодировке UTF-8

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body > ХеллоВОРЛД!
<table>
<tr><td>тут типа таблица которую буду динамически добавлять</td>
<td> тут тоже</td></tr>
</table>
</body>
</html>


открываю его в IIHTMLDocument2 но он мне его в анси показывает кракозябрами есс-но.
Я подозреваю, что так происходит потому что я его через Tstringlist в DOM документ помещаю, как стринг, чтобы парсить.
Подскажите что не так. вот код:


procedure TFormMain.Button4Click(Sender: TObject);
var
 Flags: OLEVariant;
 v: Variant;
 i:Integer;
 Document: IHTMLDocument2;
 Strl: TStringList;
 sHTMLFile: string;
begin

 try
     // Документ необходимо создать только один раз за текущую сессию работы
 if WebBrowser2.Document = nil then
   WebBrowser2.Navigate('about:blank');
 // Ожидаем создания документа и позволяем обрабатывать все сообщения
 while WebBrowser2.Document = nil do
   Application.ProcessMessages;
 Document := WebBrowser2.Document as IHtmlDocument2;
  Strl := TStringList.Create;
  sHTMLFile:= 'html\1.htm';
  sHTMLFile:= ExtractFilePath(paramstr(0))+sHTMLFile;
  if FileExists(sHTMLFile) then
    Strl.LoadFromFile(sHTMLFile);
  //Document:= CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
  Document.designMode:='on';
  while Document.readyState <> 'complete' do
          Application.ProcessMessages;
          v := VarArrayCreate([0, 0], VarVariant);

        v[0] := Strl.Text;
        Document.Write(PSafeArray(System.TVarData(v).VArray));
        Document.designMode := 'off';
        while Document.readyState <> 'complete' do
          Application.ProcessMessages;
 finally
 end;

end;


  (2015-10-20 17:27:00) [1]

Удалено модератором


sniknik   (2015-09-16 10:20:00) [2]

> почему utf8toansi помогло в этой ситуации.
потому что utf8 неправильная кодировка... ты не открываешь урл, ты пишешь прямо в документ, а IE работает с анси... если бы открыл нормально то он бы сам преобразовал.

> переделывает стринг под анси.
тогда, по твоей логике нужна была бы  функция ansitoutf8 но помогла utf8toansi. сам же пишешь.


vegarulez   (2015-09-16 09:05:00) [3]

потому как кто-то до этого писал что дельфи по умолчанию переделывает стринг под анси. не важно utf не utf - и поэтому поместив в стринг я получал абракадабру если стринг загружал в Twebbrowser без перекодировки.

Правильно описываю ситуацию?
Гуру, подскажите.


vegarulez   (2015-09-16 09:01:00) [4]

исходный в utf8.
просто я его считываю как string и загружаю потом также и поэтому думаю что в этом была проблема. хотелось бы услышать правильный ответ, от того кто понимает, почему utf8toansi помогло в этой ситуации. Правильно ли я думаю.


sniknik   (2015-09-16 08:31:00) [5]

> да в этом дело и было.
вряд ли, скорее прямо в исходном файле неправильная кодировка.


vegarulez   (2015-09-16 07:51:00) [6]

ну сообственно да в этом дело и было. Поставил utf8toansi и стало правильно отображаться.

v[0] := utf8toansi(Strl.Text);


Наверх

Титульная страница Поиск, карта сайта Написать письмо