Перейти к содержанию
  • 0
gonzales

закодировать строку в UTF8 для передачи в GET запросе

Вопросы

Доброго времени суток!

Помогите плиз, чет я запарился, не могу найти решение. Мне нужно сделать GET запрос к серверу с параметрами, содержащими русские буквы. Примерно вот такой

'method=update&OrderNum='+ordernum+'&FieldName='+grid.Columns[ACol].Header+'&FieldValue='+ UTF8Encode('русские буквы');

Запрос передаю через idHTTP. 

UTF8Encode не работает, или я им пользоваться не умею. 

Подскажите, как правильно сделать?

 

Поделиться сообщением


Ссылка на сообщение

Рекомендуемые сообщения

  • 0
bytes := BytesOf(s1);
bytes:=TEncoding.Convert(TEncoding.Default,TEncoding.UTF8,bytes);
s2 := StringOf(bytes);

Пробовал еще вот так, перебирал кодировки - ничего не помогло(((

Поделиться сообщением


Ссылка на сообщение
  • 0

попробуй вот так:
 

procedure Get(const ASession: TIdHTTP; const AUrl: string; const AResult: TStringStream);
begin
  ASession.Get(ASession.URL.URLEncode(AUrl), AResult);
end;

где AUrl - твой урл с параметрами

Поделиться сообщением


Ссылка на сообщение
  • 0

вообще запрос с русскими буквами выглядит примерно так: fire-monkey.ru/topic/6993-%D0%B7%D0%B0%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83-%D0%B2-utf8-%D0%B4%D0%BB%D1%8F-%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8-%D0%B2-get-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B5/

Используйте это:

  uses
    System.NetEncoding;
  ...

  S:=TNetEncoding.URL.EncodePath('http://fire-monkey.ru/topic/6993-закодировать-строку-в-utf8');

 

Поделиться сообщением


Ссылка на сообщение
  • 0
6 часов назад, slav_z сказал:

S:=TNetEncoding.URL.EncodePath('http://fire-monkey.ru/topic/6993-закодировать-строку-в-utf8');

странно, но почему-то такая конструкция упорно ставит первым символом /. То есть возвращает '/http://firemonkey.ru..... Естественно запрос не отрабатывается

 

Поделиться сообщением


Ссылка на сообщение
  • 0
13 часов назад, Tumaso сказал:

попробуй вот так:
 


procedure Get(const ASession: TIdHTTP; const AUrl: string; const AResult: TStringStream);
begin
  ASession.Get(ASession.URL.URLEncode(AUrl), AResult);
end;

где AUrl - твой урл с параметрами

А вот это работает корректно!!! Спасибо большое!!!

Поделиться сообщением


Ссылка на сообщение
  • 0

Переделал только немного под себя, чтобы строку в ответ выдавал

function TForm1.Get(const ASession: TIdHTTP; const AUrl: string):string;
begin
  result:=ASession.Get(ASession.URL.URLEncode(AUrl));
end;

 

Поделиться сообщением


Ссылка на сообщение
  • 0
5 часов назад, gonzales сказал:

странно, но почему-то такая конструкция упорно ставит первым символом /. То есть возвращает '/http://firemonkey.ru..... Естественно запрос не отрабатывается

 

S:=TNetEncoding.URL.EncodeQuery('http://fire-monkey.ru/topic/6993-закодировать-строку-в-utf8');

...и вам вполне подойдет THTTPClient для любых запросов...

Поделиться сообщением


Ссылка на сообщение
  • 0

а..  вот еще что: THTTPClient сам кодирует строку запроса, без всякой дополнительной фигни... очень хороший объект... реализованный просто замечательно...

  Client:=THTTPClient.Create;

  var Response:=Client.Get('http://fire-monkey.ru/topic/6993-закодировать-строку-в-utf8-для-передачи-в-get-запросе/#comment-40498');

  if Response.StatusCode=200 then
    ...

  Client.Free;

 

Поделиться сообщением


Ссылка на сообщение
  • 0
9 часов назад, slav_z сказал:

а..  вот еще что: THTTPClient сам кодирует строку запроса, без всякой дополнительной фигни... очень хороший объект... реализованный просто замечательно...

Согласен, THTTPClient более удобен в использовании, чем Indy. Еще существенный плюс - поддержка ssl из коробки, не нужно ничего дополнительно ставить. У Indy на андроиде 6+ с этим проблемы

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...