Tidhttp и русские символы

Тема в разделе "Delphi - Сети", создана пользователем slavon-x86, 16 ноя 2009.

  1. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    Код (Text):
    Memo1.Text := IdHTTP.Get('https://rbkmoney.ru/index.aspx');
    В загруженной странице всё что должно быть русским заменяется на знаки вопроса. Можно ли это исправить ?


    POST /index.aspx HTTP/1.0
    ..................
    Cookie2: $Version="1" - как можно убрать эту строку из заголовка ?
     
  2. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    Можно.. Посмотрите изначальную кодировку страницы и переведите в Win 1251 или Unicode если у вас Delphi 2009
     
  3. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    <!--shcode--><pre><code class='pascal'>function ToWin1251( const s: string ): string;
    begin
    SetLength( Result, Length( s ) );
    if Length( s ) <> 0 then
    OemToChar( PChar( s ), PChar( Result ) );
    end;


    fm10.Memo1.Text := ToWin1251(Money[n].HTTP.Get('https://rbkmoney.ru/index.aspx'));[/CODE]

    Не работает.
     
  4. ????

    ???? Гость

    OemToChar
    м/б там не Oem?

    в ответе от сервера в поле с вопросами какая кодировка указана?
    <meta http-equiv="Content-Type" content="text/html; charset=????">
     
  5. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
     
  6. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    Формально Indy возвращает, конечно же, unicode-строку, полученную как конвертирование из кодировки 1252. Только вот в строку он загоняет байты как они пришли без конвертации. Поэтому в итоге мы получаем строку, в которой лежит строка (KOI8 или Win1251), но при этом она трактуется как Win1252.

    Поэтому вот такая функция решила проблему:
    Код (Text):
     function W1252To1251(const AData: String): String;
    var
    S: RawByteString;
    X: Integer;
    begin
    SetLength(S, Length(AData));
    for X := 1 to Length(AData) do
    S[X] := AnsiChar(AData[X]);
    SetCodePage(S, 1251, False);
    Result := S;
    end;
     
Загрузка...

Поделиться этой страницей