Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Кодировка в indy 10.5.8.0


Автор: c0der 11.8.2011, 20:37
Здравствуйте.
У меня к Вам все тот же злобный вопрос про кодировку в Indy 10.
Дело в том что когда я отправляю GET запрос, в ответ мне приходит вместо русских символов -- '?????'

Как это исправить?

Перепробовал уйму способов, но ничего не получилось, может кто-то решил эту проблему?

Delphi 7 - Indy 10.5.8.0

Простой запрос вида:
Код

procedure TForm1.Button1Click(Sender: TObject);

var
HTTP:TIdHTTP;
SSL:TIdSSLIOHandlerSocketOpenSSL;
html:String;
   PostResult:TStringList;
begin
    PostResult:=TStringList.Create;
    HTTP:=TIdHTTP.Create(Self);
    SSL:=TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);
    HTTP.IOHandler:= SSL;
    HTTP.AllowCookies :=True;
    HTTP.HandleRedirects:=False;
    Http.Request.AcceptCharSet:='utf-8;q=0.7,*;q=0.7';
   PostResult.Text:=idHTTP1.Get('https://damagelab.org/');
   html:=UTF8Encode(PostResult.Text); //пробую перекодировать в утф8, но бесполезно
   ShowMessage(html);
end;

Автор: drkot 11.8.2011, 23:21
сохрани полученный поток в файл и покажи.

Добавлено через 21 секунду
или сам посмотри на кодировку и все станет понятно

Автор: c0der 12.8.2011, 07:32
Если ты имеешь ввиду ответ от сервера то я получаю вот что:

Код

<html>
<head> 
<title>DaMaGeLaB </title> 
<meta HTTP-EQUIV="Content-Type" Content="text-html; charset=windows-1251" />
<meta name="keywords" content="?????, ?????????, ??????, ??????, ????, ????, ????????????????. ??????????, ???????, ??????? ????????????">
<META NAME="Description" CONTENT="?????????, ??????, ???, ????, ???????, ????, ????????, ?????? ? ??????, ddos">
<link href="http://damagelab.org/rss.php" rel="alternate" title="DaMaGeLaB Posts" type="application/rss+xml">
<link rel="stylesheet" content="text/css" href="/style_images/css_default.css">
<link rel="stylesheet" content="text/css" href="/nod/style.css">
<link rel="stylesheet" content="text/css" href="/style_images/iconize.css">
<link rel="stylesheet" content="text/css" href="/style_images/DLIndex.css">

................ 
 
</body> 
</html>



Автор: Akella 13.8.2011, 20:24
Ты запрашивает данные у сервера в юникоде
Цитата(c0der @  11.8.2011,  20:37 Найти цитируемый пост)
Http.Request.AcceptCharSet:='utf-8;q=0.7,*;q=0.7';



а на самом деле сайт сделан с использованием win1251
Цитата(c0der @  12.8.2011,  07:32 Найти цитируемый пост)
<meta HTTP-EQUIV="Content-Type" Content="text-html; charset=windows-1251" />


Автор: c0der 16.8.2011, 22:03
Но если я запрашиваю данные в кодировке виндовс-1251, то приходят кракозябры, в этом то и вопрос? как быть...? smile 

Автор: Akella 23.8.2011, 15:56
Код

function HttpGetUrl(url: string; idHttp: TIdHttp): string;
var
  M: TStringStream;
begin
  M := TStringStream.Create('');

  try
      IdHTTP.Get(url, m);

      if IdHTTP.ResponseCode = 502 then
        begin
          result := 'Ошибка 502. ' + url;
          freeandnil(m);
          exit;
        end;

  except
      on e: exception do
        begin
          result := 'Ошибка *HttpGetUrl*. ' + url;
          if Assigned(m) then freeandnil(m);
        end;
  end;// try except

    result := m.DataString;
    freeandnil(m);
end;


Сохрани в текстовый файл m.DataString, что получится
но учти, никаких UTF8Encode

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)