На основании этого вопроса: Как получить исходный код HTML из TWebBrowser
Если я запускаю этот код со страницей html с кодовой страницей Unicode, результат будет тарабарщиной, потому что TStringStream не является Unicode в D7. . страница может иметь кодировку UTF8 или другую кодовую страницу (Ansi).
Как я могу определить, является ли TStream / IPersistStreamInit Unicode / UTF8 / Ansi?
Как мне всегда возвращать правильный результат в виде WideString для этой функции?
function GetWebBrowserHTML(const WebBrowser: TWebBrowser): WideString;
Если я заменю TStringStream на TMemoryStream и сохраню TMemoryStream в файл, все будет хорошо. Это может быть Unicode / UTF8 / Ansi. но я всегда хочу вернуть поток как WideString:
function GetWebBrowserHTML(const WebBrowser: TWebBrowser): WideString;
var
// LStream: TStringStream;
LStream: TMemoryStream;
Stream : IStream;
LPersistStreamInit : IPersistStreamInit;
begin
if not Assigned(WebBrowser.Document) then exit;
// LStream := TStringStream.Create('');
LStream := TMemoryStream.Create;
try
LPersistStreamInit := WebBrowser.Document as IPersistStreamInit;
Stream := TStreamAdapter.Create(LStream,soReference);
LPersistStreamInit.Save(Stream,true);
// result := LStream.DataString;
LStream.SaveToFile('c:\test\test.txt'); // test only - file is ok
Result := ??? // WideString
finally
LStream.Free();
end;
end;
РЕДАКТИРОВАТЬ: Я нашел эту статью - Как загружать и сохранять документы в TWebBrowser в стиле Delphi путь
Что делает именно то, что мне нужно. но корректно работает только с компиляторами Delphi Unicode (D2009 +). прочтите раздел Заключение:
Очевидно, мы могли бы сделать гораздо больше. На ум сразу приходит пара вещей. Мы модернизируем некоторые функции Unicode и поддержку кодировок, отличных от ANSI, в код компилятора до Unicode. Настоящий код при компиляции с чем-либо ранее, чем Delphi 2009, не будет правильно сохранять содержимое документа в строки, если набор символов документа не является ANSI.
Магия явно находится в TEncoding
классе (TEncoding.GetBufferEncoding
). а у D7 нет TEncoding
. Любые идеи?
TWideStringList
иTJclWideStringList
, а в компонентах TNT Unicode естьTWideStringList
, и я думаю, что их гораздо больше. Возможно, у некоторых из них так или иначе есть адаптер COM IStringList. Попробуйте их или попробуйте найти больше реализаций Unicode StringList для Delphi 7, в Google, на torry.net или в каком-либо другом сборщике - person Arioch 'The   schedule 11.01.2013