javascript – Delphi indy10 http服务器和ExtJS表单提交

我有一个问题,我不知道如何解决.

我有一个Indy10 HTTP服务器.我在许多应用程序中使用过Indy9和Indy10 HTTP服务器,从未遇到任何问题.但现在我使用带有ExtJS javascript RAI框架的Indy10 HTTP服务器.

问题是当我提交包含非ansi字符的数据时.例如,当我提交1250代码页中的字母“č”(斯洛文尼亚语,克罗地亚语……)时,我在Indy的“未解决的参数”下得到以下内容 – > “C”.这是utf-8编码中“č”字母的正确十六进制表示.我的所有页面都是utf-8,我从未向Indy提交表单数据时遇到任何问题.我调试了代码,发现我实际上得到了一个像这样的字节序列:[37,67,52,37,56,68].这是字符串“č”的字节表示.但是当然Indy无法正确编码为UTF-16.举个例子.实际表格字段:

FirstName=črt

提交后出现如下:

FirstName=%C4%8Drt

我不知道如何解决这个问题.我查看了ExtJS论坛,但这个主题没有任何内容.有人对这类问题一无所知吗?

编辑:

如果我对params ad JSON进行编码,则它们会正确到达.我也尝试对params进行URL解码,但结果不正确.也许我错过了什么.我会再看看这个.是的,似乎ExtJS URL编码参数

EDIT2:

好的,我发现了更多.我比较了帖子数据的实际内容.它是这样的:

Delphi 2006 (Indy10): FirstName=%C4%8D
Delphi 2010 (Indy10): FirstName=%C4%8D

在这两种情况下,未解析的参数都是相同的.我打开了ParseParams并在BDS2006中打开了
他们被正确解析,但在2010年他们没有.这是使用delphi进行的Indy10.这个版本有错误还是我做错了什么?

EDIT3:

我下载了最新的夜间版本Indy10.仍然是同一个问题.

EDIT4:

我不得不接受自己的答案.

解决方法:

回答这个话题.

这肯定不会像在unicode下那样工作. Indy在内部使用unicode字符串.问题是当参数被解码为TStringList时.问题是这条线:

Params.Add(TIdURI.URLDecode(s));

在“TIdHTTPRequestInfo.DecodeAndSetParams”中找到.它没有正确解码params,可能是因为它正在解决unicode字符串.

我找到的解决方法是使用“HTTPApp.pas”中的“HTTPDecode”.

Params := TStringList.Create;
try
  Params.StrictDelimiter := True;
  Params.Delimiter := '&';

  // parse the parameters and store them into temporary string list
  Params.DelimitedText := UTF8ToString(HTTPDecode(UTF8String(Request.UnparsedParams)));
  // do something with params... 
finally
  Params.Free;
end;

但我无法相信这样的共同任务不能正常运作.有人可以证实这确实是一个错误,或者我只是做错了什么?

相关文章

我有一个问题,我不知道如何解决.我有一个Indy10HTTP服务器.我...
我正在使用sdk1.17开发一个Firefox附加组件.它包含一个带有按...
Ext.define('PhysicsEvaluationSystemV1.view.base.Bas...
默认所有列(假设列3最大3列,动态显示),使用headerRowsEx中...
序言   1.ExtJs是一套很好的后台框架。现在很流行的,我们...
我在ExtJs中有这个表单.如果field1不为空,则field2不能为空....