22.06.2018, 06:13
|
Прохожий
|
|
Регистрация: 18.05.2018
Сообщения: 31
Версия Delphi: Delphi 7
Репутация: 10
|
|
Цитата:
Сообщение от lmikle
Ага, тупишь.
Я привел код, который выдрал из моего проекта. Сорь, забыл сказать, что он написан на Delphi 10 Tokyo, где String = UnicodeString, т.е. уже двухбайтовой. В смысле, где-то у тебя что-то теряется. Как вариант, нужно грузить страничку через поток (что бы ничего не терять) и декодировать полученный результат.
|
Спасибо за помощь!!!
DELPHI 7
Сделал так:
Код:
function MyUtf8ToAnsi(Source: String): String;
var
i: Cardinal;
c: Byte;
wc: Cardinal;
begin
if Source = '' then
begin
Result := '';
Exit;
end;
Result := '';
i := 1;
while (i <= length(Source)) do
begin
wc := Cardinal(Source[i]);
Inc(i);
if (wc and $80) <> 0 then //128+
begin
if i > length(Source) then
begin
Result:=Result + Char(wc);
Exit; // incomplete multibyte char
end;
c := Byte(Source[i]);
Inc(i);
if (c and $C0) <> $80 then
Result := Result + Char(wc)+Char(c)
else
Result := Result + WideChar(((wc and $3F) shl 6) or (c and $3F));
end
else
Result := Result + WideChar(wc);
end;
end;
procedure TForm1.sSpeedButton1Click(Sender: TObject);
var
IdHTTP : TIdHTTP;
Id_HandlerSocket : TIdSSLIOHandlerSocketOpenSSL;
M:TStringStream;
begin
IdHTTP := TIdHTTP.Create(Nil);
Id_HandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
Try
IdHTTP.Request.BasicAuthentication := False;
IdHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';
Id_HandlerSocket.SSLOptions.Mode := sslmClient;
Id_HandlerSocket.SSLOptions.Method := sslvSSLv23;
IdHTTP.IOHandler := Id_HandlerSocket;
M:=TStringStream.Create('');
IdHTTP.Get( 'тут сайт https' , M ); // сюда вписывать ссылку
sMemo1.Lines.Text:=M.DataString;
sMemo1.Lines.Text := MyUtf8ToAnsi(sMemo1.Lines.Text);
Finally
Id_HandlerSocket.Free;
M.Free;
IdHTTP.Free;
End;
end;
|