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

slavon-x86

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


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

vital

Больной Компом Детектед
29.01.2006
2 432
33
#2
Можно.. Посмотрите изначальную кодировку страницы и переведите в Win 1251 или Unicode если у вас Delphi 2009
 

slavon-x86

Well-known member
18.12.2005
215
0
#3
<!--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=????">
 

slavon-x86

Well-known member
18.12.2005
215
0
#6
Формально 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;