Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > idhttpserver и русскоязычный url


Автор: cyberovskij 17.3.2011, 17:52
Если дать запрос на idhttpserver www.myserv.com/страница1.html то в свойстве ARequestInfo.Document в обработчике  OnCommandGet получается крякозябленный текст. Как получить читаемую строку?

Автор: z-END 17.3.2011, 19:32
видимо потому что utf-8?

Автор: cyberovskij 17.3.2011, 20:14
Цитата(z-END @ 17.3.2011,  19:32)
видимо потому что utf-8?

 smile я тоже так думаю что здесь проблема как-то   связана с utf-8. Вопрос в том как?

Автор: Snowy 18.3.2011, 12:35
Ты сначала покажи строку.
Откель нам знать, что у тебя там не так...

Автор: Akella 20.3.2011, 10:58
urlencode/urldecode?

Добавлено @ 11:05
Код

function UrlEncode(Str: string): string;

  function CharToHex(Ch: Char): Integer;
  asm
    and eax, 0FFh
    mov ah, al
    shr al, 4
    and ah, 00fh
    cmp al, 00ah
    jl @@10
    sub al, 00ah
    add al, 041h
    jmp @@20
@@10:
    add al, 030h
@@20:
    cmp ah, 00ah
    jl @@30
    sub ah, 00ah
    add ah, 041h
    jmp @@40
@@30:
    add ah, 030h
@@40:
    shl eax, 8
    mov al, '%'
  end;

var
  i, Len: Integer;
  Ch: Char;
  N: Integer;
  P: PChar;
begin
  Result := '';
  Len := Length(Str);
  P := PChar(@N);
  for i := 1 to Len do
  begin
    Ch := Str[i];
    if Ch in ['0'..'9', 'A'..'Z', 'a'..'z', '_', '/'] then
      Result := Result + Ch
    else
    begin
      if Ch = ' ' then
        Result := Result + '+'
      else
      begin
        N := CharToHex(Ch);
        Result := Result + P;
      end;
    end;
  end;
end;



Код

 idHttp1.Get(UrlEncode(AnsiToUtf8('http://www.myserv.com/страница1.html ')));


серверу ты передашь адрес примерно в таком виде:
http://www.google.com.ua/#sclient=psy&hl=ru&q=%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B01&

Автор: cyberovskij 24.3.2011, 22:06
Цитата(Akella @ 20.3.2011,  10:58)
urlencode/urldecode?

Добавлено @ 11:05
Код

function UrlEncode(Str: string): string;

  function CharToHex(Ch: Char): Integer;
  asm
    and eax, 0FFh
    mov ah, al
    shr al, 4
    and ah, 00fh
    cmp al, 00ah
    jl @@10
    sub al, 00ah
    add al, 041h
    jmp @@20
@@10:
    add al, 030h
@@20:
    cmp ah, 00ah
    jl @@30
    sub ah, 00ah
    add ah, 041h
    jmp @@40
@@30:
    add ah, 030h
@@40:
    shl eax, 8
    mov al, '%'
  end;

var
  i, Len: Integer;
  Ch: Char;
  N: Integer;
  P: PChar;
begin
  Result := '';
  Len := Length(Str);
  P := PChar(@N);
  for i := 1 to Len do
  begin
    Ch := Str[i];
    if Ch in ['0'..'9', 'A'..'Z', 'a'..'z', '_', '/'] then
      Result := Result + Ch
    else
    begin
      if Ch = ' ' then
        Result := Result + '+'
      else
      begin
        N := CharToHex(Ch);
        Result := Result + P;
      end;
    end;
  end;
end;



Код

 idHttp1.Get(UrlEncode(AnsiToUtf8('http://www.myserv.com/страница1.html ')));


серверу ты передашь адрес примерно в таком виде:
http://www.google.com.ua/#sclient=psy&hl=ru&q=%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B01&

я так понял что весь приведенный код должен работать на клиентской стороне? Дело в том что запрос посылается из bho для интернет експлорера. Этот bho реализован на MS VС++. Если это прояснит суть вопроса то я могу его выложить.  А вот на серверной стороне  работает idhttp сервер. Ему как раз и поступают строки в 8-и битной кодировке  в виде шестнадцатеричной записи "%XX". Скорее всего мне нужна функция декодирования, которая делает преобразование из шестнадцатеричной записи "%XX в нужную кодировку

Автор: Snowy 25.3.2011, 11:50
Ну вот так бы и сразу.
Ня: http://forum.vingrad.ru/index.php?showtopic=318089&view=findpost&p=2268376
А то "крякозяблики", понимаете ли, бывают разные.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)