Post/get неправильная кодировка

Тема в разделе "Delphi - Сети", создана пользователем Encore, 27 окт 2009.

Статус темы:
Закрыта.
  1. Encore

    Encore Гость

    [codebox]
    var
    params,responseres:tstringlist;
    s:string;
    begin
    params:=TStringList.Create;
    responseres:=TStringList.Create;
    try
    params.Add('Login=мойлогин');

    params.Add('Domain=мойдомен');
    params.Add('Password=мойпас');
    responseres.Text:=idhttp1.Post('http://win.mail.ru/cgi-bin/auth',params);
    finally
    params.free;
    responseres.free;
    s:=idhttp1.get('http://my.mail.ru/мойдомен/мойпас');
    memo1.Lines.Add(s);
    [/codebox]
    авторизация проходит на 5+, получаю нужную мне страницу, перемещаю ее код в мемо, а там каракули вместо русских сиволов..
    подскажите где поправить кодировку, ах и еще на 7 дельф была проблема с куками но аналогичный код возвращал нормальную кодировку, это началось прослеживаться только в 2009той
     
  2. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    Все просто. В 2009 Delphi (наконец-то) везде стал использоваться Unicode для поддержки всякой разной, никому кроме китайцев, не нужной хрени. Попробуйте просто найти в нете ф-ю перекодирования текста в Юникод.
     
  3. Encore

    Encore Гость

    Уже сделал, но все равно не вышло. в 2009 string-unicodestring, получать он страничку должен в win-1251, пробывал конвертировать не выходит...пробывал присвоить rawstring(без кодировки) все равно на выходе иерогливы....сейчас отложил вопрос, люди подсказали что косяк где то внутри самой indy...верится слабо но пока решений не нашел..если у кого то получится получить нормальный текст прошу отписать здесь.
    П.С: код копировал отрывками поэтому сделаю поправку чтобы он смотрелся наглядно
    [codebox]
    var
    params,responseres:tstringlist;
    s:string;
    begin
    params:=TStringList.Create;
    responseres:=TStringList.Create;
    try
    params.Add('Login=мойлогин');

    params.Add('Domain=мойдомен');
    params.Add('Password=мойпас');
    responseres.Text:=idhttp1.Post('http://win.mail.ru/cgi-bin/auth',params);
    s:=idhttp1.get('http://my.mail.ru/мойдомен/мойпас');
    memo1.Lines.Add(s);
    finally
    params.free;
    responseres.free;
    [/codebox]
     
  4. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    Для Delphi 2009:

    Формально 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;
     
Загрузка...
Статус темы:
Закрыта.

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