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


Автор: gonzales 5.2.2014, 15:33
Доброе время суток!
Столкнулся с неожиданной траблой. Ни один из советов этого и других форумов не помог.

Передаю в Get запросе название папки кириллицей.
Ответ сервера - NotFound, подозреваю, что проблема с кодировкой, так как с латинскими названиями нет никаких проблем.

Вот код
Код

s:string;
s:='/Photos/Тест';
IdHTTP1.Get('https://api.dropbox.com/1/metadata/dropbox'+s+'access_token='+access_token+'&oauth_consumer_key=neoyzmg2xfq6n',memstream);
               


Аналогичный запрос в браузере дает положительный результат. 

Подскажите куда копать?

Delphi XE5 Indy10

Автор: Akella 5.2.2014, 17:25
Так кодируй

Добавлено @ 17:26
URLEncode вроде есть или в тырнете, или у инди

это из D2007

Код

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;


Добавлено через 4 минуты и 33 секунды
https://www.google.com/search?q=delphi+urlencode&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a&channel=fflb

и первая же ссылка
http://stackoverflow.com/questions/776302/standard-url-encode-function

Автор: gonzales 5.2.2014, 17:45
Спасибо тебе, мил человек!!!!

Я уже как только не кодировал, не получается.

Вот рабочий код оказался
Код

uses
  IdURI;

..
begin
  S := TIdURI.URLEncode(str);
//
  S := TIdURI.URLDecode(str);
end;

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