Stalker
-
Постов
9 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Stalker
-
-
16 часов назад, krapotkin сказал:
что-то не сходится в показаниях
я тоже абсолютно корректно посылаю принимаю данные на win и android и все в правильной кодировке безо всяких ухищрений примерно аналогичным кодом
что-то важное вы скрываете...
Что например я скрываю ? Есть есть вопросы - задавайте. В атаче я прикрепил демку. Которая использует два варианта Post (мой и Tumaso).
Если ставишь галочку "Use UTF8Encode", данные (параметры запроса) в веб-сервис приходят в utf-8, если не ставишь то в windows-1251.
Дергал этот же сервис их Postman - там всегда параметры приходят в сервис в utf-8.
-
Попробовал Ваш метод.
Сам сервис вызывается, но параметры в него все равно передаются в windows-1251, а не в UTF-8 и соответственно искомые данные не находятся. То есть все равно приходится использовать UTF8Encode. Так что Ваш вариант к сожалению тоже не помог и основной вопрос остается актуальным.
Суда по всему данные в Edit.Text в 1251, а перекодировкой параметров из ASource метод TNetHTTPClient.Post не занимается.
P.S. Пара вопросов по вашему методу:
1. Почему DisposeOf, а не Free или FreeAndNil ?
2. Чем вариант возвращения данных запроса в LResult (в параметр) лучше, чем возвращаемый самим методом TNetHTTPClient.Post ?
-
Вызывал Post и как
NetHTTPClient1.Post('https://сайт/сервис', ASource,nil, TEncoding.UTF8) .ContentAsString(TEncoding.UTF8);и как
NetHTTPClient1.Post('https://сайт/сервис', ASource) .ContentAsString(TEncoding.UTF8);
В обоих случаях заголовок, который приходит на сервер, одинаковый:
ЦитатаHEADER: Connection=Keep-Alive
HEADER: Content-Type=application/x-www-form-urlencoded; charset=utf-8
HEADER: @HttpURI=/сервис
HEADER: @HttpMethod=POST
HEADER: Authorization=Basic d2dfVzqdUwQ==
HEADER: Host=сайт
HEADER: @HttpVersion=HTTP/1.1
HEADER: User-Agent=Embarcadero URI Client/1.0
HEADER: @MediaType=application/x-www-form-urlencoded
HEADER: Content-Length=109 -
Это я тоже пробовал. Или оно для другого или не работает как надо.
Кроме того, если Вы пройдете по коду NetHTTPClient1.Post внутрь исходников, то в
THTTPClient.Post в коде THTTPClient.CreateFormFromStings есть такая проверка:
if AEncoding = nil then LEncoding := TEncoding.UTF8 else LEncoding := AEncoding;
То есть по умолчанию оно все равно будет UTF8 . Но как я уже сказал выше это не помогает.
-
Пробовал конечно. В этом случае на сервер приходит русский текст в кодировке windows-1251 (ANSI).
-
Hi All,
Delphi 10.3.3. На текущий момент VCL, дальше будет FMX для мобильных платформ.
Имеется Web-Сервис который вызывается через Post с передачей ему параметров в виде x-www-form-urlencoded. в теле запроса.
Параметры могут содержать русские буквы, поэтому они должны быть переданы в сервис в UTF8.
Вызовом этого сервиса занимается следующий код:
var ASource :TStringList; cResponce :String; begin ASource := TStringList.Create(); ASource.Add('nParam1=1'); ASource.Add('cParam2='+UTF8Encode(Edit1.Text)); ASource.Add('cParam3='+UTF8Encode(Edit2.Text)); ASource.Add('cParam4='+UTF8Encode(Edit3.Text)); cResponce := NetHTTPClient1.Post('https://сайт/сервис', ASource).ContentAsString(TEncoding.UTF8); FreeAndNil(ASource);
Сам код работает нормально, сервис вызывается, данные возвращаются.
НО для передачи параметров в UTF8 приходится использовать функцию UTF8Encode, что приводит в Warning'у от Delphi:
ЦитатаW1057 Implicit string cast from 'RawByteString' to 'string'
Вопрос: Как правильно организовать кодирование параметров в UTF8, что бы этого Warning'а не было ?
-
21 минуту назад, Barbanel сказал:
Не сталкивался с таким, не могу сказать. Возможно баг самой FMX, возможно баг в файле стиля (даже не баг, а внутренняя область гроупбокса неправильно описана). Я бы начал проверку со стиля.
Да у меня вроде бы никаких особых стилей для него не задано. А в той версии FMX что у Вас, такая же ошибка ?
22 минуты назад, Barbanel сказал:Есть костыльное решение - установи Margins.Top побольше
Это помогло, спасибо.
23 минуты назад, Barbanel сказал:Чтобы это обойти придется кидать на Form1 прямоугольник (TRectangle емнип) и присваивать ему полупрозрачную заливку. Соост в центр твоего ректангла кидаешь еще одну непрозрачную панель и уже на ней размещаешь свои контролы.
А вот тут не понятно. Ведь на основной форме Form1 Уже есть разные контролы и еще один (TRectangle) туда не поместится. Или Вы тут описались, и имели ввиду Form2 ?
-
Hi All,
Delphi 10.3.3, FMX, Android 32bit
1) Есть основная форма приложения Form1.
Есть форма приложения для логина Form2 (на ней пара TEdit, пара TButton).
Вызываю из Form1 форму Form2 в модальном режиме с асинхронной процедурой обработки выбора.
Все работает, но есть один момент: окно Form2 открывается на весь экран смарта (полностью закрывая собой основное окно Form1), а хотелось что бы оно было небольшого размера по центру основного окна (по типу ShowMessage)..
Вопрос: Как это сделать ?
2) И еще небольшой вопрос. В качестве Android устройства у меня смартфон Thl 5000 (с экраном 5"). В IDE в ModelView я соответственно выбираю строку Android 5" Phone. Но когда на смартфоне запускает приложение, то я вижу что размер формы созданный Delphi в ModelView больше чем реальный размер окна (часть элементов на нем не видна, она получилась за границами экрана).
Вопрос: В чем тут может быть причина ?
3) Кидаю на форму GroupBox, внутрь помещаю TEdit и устанавливаю у него Align = Top. В результате TEdit залазит на заголовок (Caption) у GroupBox'a.
Если такое же сделать в VCL, то там все нормально и TEdit располагается ниже GroupBox.Caption.
Вопрос: Это что какая то особенность FMX или это ошибка FMX ? Можно ли как то это поправить ?
Передача параметров (с русскими буквами) в UTF8 в NetHTTPClient.Post
в Прочие вопросы
Опубликовано
Большое Вам спасибо за подсказку, направили меня по верному пути.
Проблема оказалась действительно в сервисе, а точнее в том, как он видит значения параметров в зависимости от заголовка.
Если в HEADER указано Content-Type=application/x-www-form-urlencoded; charset=utf-8
то сервис делает автоматическую конвертацию из utf-8 в 1251 (эта кодировка базы сервиса)
А если указано Content-Type=application/x-www-form-urlencoded
то автоматическая конвертация не делается и ее должен сделать сам разработчик сервиса.
А так как раньше я тестировал свои сервисы только на Postman (а у него по умолчания второй вариант), то я всегда делал эту конвертацию сам. Отсюда и был баг неправильного значения параметра.