• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы slavon-x86
  • Дата начала
S

slavon-x86

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


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

vital

Можно.. Посмотрите изначальную кодировку страницы и переведите в Win 1251 или Unicode если у вас Delphi 2009
 
S

slavon-x86

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

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

????

OemToChar
м/б там не Oem?

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

slavon-x86

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
 
S

slavon-x86

Формально 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;
 
Мы в соцсетях:

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