Перейти к содержанию
Fire Monkey от А до Я
  • 0

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


gonzales

Вопрос

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

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

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

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

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

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

 

Ссылка на комментарий

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

  • 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
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+ с этим проблемы

Ссылка на комментарий
  • 0

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

А не подскажете, как обратную задачку решить? В ответе сервера есть русские буквы, соответственно отображается крокозябами. Как перевести в нормальный вид? Пробовал использовать Utf8ToAnsi - не помогло, кроказябы только поменялись на другие)))

Подозреваю, что ответ приходит в юникоде, так как на серверной стороне отвечает микроконтроллер, но это не точно, так как идет еще редирект через какое-то облако по https.

 

 

Ссылка на комментарий
  • 0

Решил вопрос

var
      sstream: TStringStream;

begin

        sstream := TStringStream.Create('', TEncoding.UTF8);
        HTTP.Get(Url, sstream);

       showmessage(sstream.DataString);

end;

 

Не работает кнопка Код, поэтому выложил просто текстом

Ссылка на комментарий
  • 0
В 22.11.2020 в 13:25, Tumaso сказал:

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

Да, тоже вдоволь натрахался с ssl на андроиде, в результате попробовал THTTPClient, остался доволен как слон, работает из коробки, никакого головняка, в общем хороший компонент, рекомендую

Ссылка на комментарий

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

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

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

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

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

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

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

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

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

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