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

  • Автор темы Encore
  • Дата начала
Статус
Закрыто для дальнейших ответов.
E

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той
 
V

vital

Все просто. В 2009 Delphi (наконец-то) везде стал использоваться Unicode для поддержки всякой разной, никому кроме китайцев, не нужной хрени. Попробуйте просто найти в нете ф-ю перекодирования текста в Юникод.
 
E

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]
 
S

slavon-x86

Для Delphi 2009:

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

Поэтому вот такая функция решила проблему:
Код:
 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;
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!