У меня есть проблема, которую я не знаю, как решить.
У меня есть HTTP-сервер Indy10. Я использовал HTTP-серверы Indy9 и Indy10 во многих приложениях, и у меня никогда не было проблем. Но сейчас я использую HTTP-сервер Indy10 с инфраструктурой RAI ExtJS javascript.
Проблема заключается в том, что я отправляю данные, содержащие неанси-символы. Например, когда я отправляю букву "č", которая является буквой в кодовой странице 1250 (словенский, хорватский ...), я получаю следующее в Indy под "unparsed params" -> "% C4% 8D". Это правильное шестнадцатеричное представление буквы "č" в кодировке utf-8. Все мои страницы - utf-8, и у меня никогда не было проблем с отправкой данных формы в Indy. Я отладил код и увидел, что на самом деле получаю последовательность байтов, подобную этой: [37, 67, 52, 37, 56, 68]. Это байтовое представление строки "% C4% 8D". Но, конечно, Indy не может правильно закодировать это в UTF-16. Так что в качестве примера. Фактическое поле формы:
FirstName=črt
выглядит так, когда отправлено:
FirstName=%C4%8Drt
Я не знаю, как это решить. Я смотрел форумы ExtJS, но по этой теме ничего нет. Кто-нибудь знает что-нибудь об этой проблеме?
EDIT
Если я закодирую params и JSON, они приходят правильно. Я также пытался URL-адрес декодировать параметры, но результат не является правильным. Может быть, я что-то пропустил. Я посмотрю на это снова. И да, кажется, что ExtJS URL кодирует параметры
EDIT2
Хорошо, я обнаружил больше. Я сравнил фактическое содержание данных поста. Это так:
Delphi 2006 (Indy10): FirstName=%C4%8D
Delphi 2010 (Indy10): FirstName=%C4%8D
В обоих случаях неразобранные параметры идентичны. У меня есть ParseParams включен и в BDS2006
они правильно разобраны, а под 2010 их нет. Это Indy10, набитый дельфи. В этой версии есть ошибка или я что-то не так делаю?
EDIT3
Я скачал последнюю ночную сборку Indy10. Все та же проблема.
EDIT4
Я вынужден принять собственный ответ.