Конференция "Сети" » Post/get неверная кодировка
 
  • Encore (27.10.09 13:49) [0]
    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);

    авторизация проходит на 5+, получаю нужную мне страницу, перемещаю ее код в мемо, а там каракули вместо русских сиволов..
    подскажите где поправить кодировку, ах и еще на 7 дельф была проблема с куками но аналогичный код возвращал нормальную кодировку, это началось прослеживаться только в 2009той
  • Медвежонок Пятачок © (27.10.09 14:02) [1]
    подскажите где поправить кодировку

    в программе разумеется, где же еще.
    после получения контента.
  • Encore (27.10.09 14:09) [2]
    В веб браузере? каким образом? дописать мета тэг в шапке? он у меня постом уже кривые символы получает
  • Encore (27.10.09 14:10) [3]
    оговорился Get'ом получает кривые символы)
  • Сергей М. © (27.10.09 14:22) [4]
    Это что за выкрутасы ?

    try
    ..
     Post // <-- метод возбудил исключение по причине, например, нештатного разрыва соединения с сервером
    ..
    finally
    ..
     Get // <-- а нам по барабану разрыв соединения ! Все равно лезем на сервер
    ..
    end
  • Anatoly Podgoretsky © (27.10.09 14:37) [5]
    В 2009 string  = UnicodeString
  • Encore (27.10.09 15:09) [6]
    я просто отрывками код выписывал, не туда строчечку в форуме запихнул) но это не то поле:) подскажите как решить тот вопрос что В 2009 string  = UnicodeString
  • Encore (27.10.09 15:16) [7]
    http://edn.embarcadero.com/ru/article/38582 помогла статья. разобрался:)
  • Anatoly Podgoretsky © (27.10.09 15:20) [8]
    Трудно сказать, поскольку idhttp1.get уже объявлен как String, а должен быть RawByteString, можно попробовать привести к RawByteString, может получится, ну и конечно не ясно, что дальше делать, ведь для мемо нужен Юникод, а решить какая кодировка у страницы не всегда возможно. В общем сначала попробуй

    s: AnsiString{(N)};

    s := RawByteString(idhttp1.get('http://my.mail.ru/мойдомен/мойпас'));



    И зачем в программе responseres, если оно не используется.
  • Encore (27.10.09 15:28) [9]
    это отрывок кода...используется. нет не получилось:( страницы всегда в вин-1251
  • Encore (27.10.09 15:30) [10]
    я совсем запутался:(
  • Anatoly Podgoretsky © (27.10.09 15:31) [11]
    Значит не судьба, Инди он попорченый в 2009, точнее он попорченый по жизни и много раньше. Смени компонент на что ни будь другое.
  • Anatoly Podgoretsky © (27.10.09 15:43) [12]

    > я совсем запутался:(

    Сейчас распутаем.

    В далекие, далекие времена - Борланд, известный халявшик, вместо написания своих Интернет компонент, в очередной раз решил их сменить на очередную халяву, в качестве халявы достался Инди, остальные отказали Борланду, но Инди был написан криворуко, не переносимо и вот настал очередной северный пушистый лисиц - Борланд наконец перешел на Юникод (2009) и вместо того чтобы адаптировать Инди, оставил все как есть, а у тех функции тоже были объявлены STRING!!! и вот и приплыли, не все конечно, англоязычные не пострадали, в отличии от кирилицы.
  • Anatoly Podgoretsky © (27.10.09 15:44) [13]
    Не так давно эту тему обсуждали, не помню нашли ли обходную дорогу
  • Медвежонок Пятачок © (27.10.09 18:31) [14]
    В веб браузере?

    Вроде по-русски написали. В программе. В своей.
  • Encore (28.10.09 02:04) [15]
    Медвежонок Пятачок- я думаю вас стоит задуматься о своих ответах. собственно нужны ли они вообще?
    Anatoly Podgoretsky вам я очень очень благодарен.!!!спасибо большое, ябуду пробывать, если что нибудь получится отпишусь в теме
  • Сергей (16.08.10 15:18) [16]
    Удалено модератором
    Примечание: Создай свою тему
  • Дмитрий Белькевич (17.08.10 12:22) [17]
    Не так давно правил IdCustomHTTPServer.pas. Тоже были проблемы с кодировкой.

    Долго искал концы, вылечилось так:


    procedure TIdHTTPRequestInfo.DecodeAndSetParams(const AValue: String);
    var
     i, j : Integer;
     s: string;
    begin
     // Convert special characters
     // ampersand '&' separates values    {Do not Localize}
     // TODO: need to decode UTF-8 octets...
     Params.BeginUpdate;
     try
       Params.Clear;
       i := 1;
       while i <= Length(AValue) do
       begin
         j := i;
         while (j <= Length(AValue)) and (AValue[j] <> '&') do {do not localize}
         begin
           Inc(j);
         end;
         s := Copy(AValue, i, j-i);
         // See RFC 1866 section 8.2.1. TP
         s := StringReplace(s, '+', ' ', [rfReplaceAll]);  {do not localize}
         Params.Add(TIdURI.URLDecode(s));
         i := j + 1;
       end;
     finally
       Params.EndUpdate;
     end;
    end;




         Params.Add(TIdURI.URLDecode(s, TIdTextEncoding.Default));



    В другом месте, для того, что бы русский текст запихнуть в сеть:


      FClient.IOHandler.Write(MSG_START + FOwner.FCurrSendStr + MSG_END, TIdTextEncoding.Default);



    Без 'TIdTextEncoding.Default' запихивались '????????'.

    Если не лень - смотри, где инди косячит в своих потрохах.
  • Anatoly Podgoretsky © (18.08.10 10:59) [18]
    > Дмитрий Белькевич  (17.08.2010 12:22:17)  [17]

    Ты не мог бы предложить, что ни будь менее болезненое.
 
Конференция "Сети" » Post/get неверная кодировка
Есть новые Нет новых   [134436   +25][b:0][p:0.002]