EncodeURIComponent в модуле Datasnap.DSClientRest вызывает ту же проблему для меня.
Мое исправление состояло в том, чтобы скопировать модуль в исходный каталог и изменить функцию EncodeURIComponent, чтобы изменить параметры TNetEncoding.URL.Encode из[]
до [TURLEncoding.TEncodeOption.EncodePercent]
, поэтому новая строка результатов будет выглядеть следующим образом:
Result := TNetEncoding.URL.Encode(AStr, UnsafeChars, [TURLEncoding.TEncodeOption.EncodePercent]);
Причина в том, что при вызове без [TURLEncoding.TEncodeOption.EncodePercent]
часть
if not(TEncodeOption.EncodePercent in Options) and (I + 2 < Len) and (Buff[I] = Ord('%')) and
IsHexChar(Buff[I + 1]) and IsHexChar(Buff[I + 2]) then
begin
Result := Result + '%' + Char(Buff[I + 1]) + Char(Buff[I + 2]);
Inc(I, 3);
end
не будет кодировать%если два следующих символа являются допустимыми шестнадцатеричными символами.