Показать сообщение отдельно
  #9  
Старый 22.06.2018, 06:13
Tech N9ne Tech N9ne вне форума
Прохожий
 
Регистрация: 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;
Ответить с цитированием