我有一个问题,我不知道如何解决。Delphi indy10 http服务器和ExtJS表单提交
我有一个Indy10 HTTP服务器。我在许多应用程序中都使用了Indy9和Indy10 HTTP服务器,并且从来没有遇到任何问题。但现在我正在使用Indy10 HTTP服务器和ExtJS JavaScript RAI框架。
问题是当我提交包含非ansi字符的数据时。例如,当我在1250代码页(斯洛维尼亚语,克罗地亚...)中提交信件“č”时,我在Indy的“未解析的参数” - >“%C4%8D”中获得以下内容。这是utf-8编码中“č”字母的正确十六进制表示形式。我所有的网页都是utf-8,从来没有任何问题向Indy提交表单数据。我调试了代码,发现我实际上得到了如下这样的字节序列:[37,67,52,37,56,68]。这是字符串“%C4%8D”的字节表示形式。但是,当然,Indy不能正确地将其编码为UTF-16。举个例子。实际的表单字段:
FirstName=črt
submited时候出来是这样的:
FirstName=%C4%8Drt
我不知道如何解决这个问题。我看了ExtJS论坛,但是这个话题没有任何内容。有人知道这种问题吗?
编辑:
如果我编码PARAMS广告JSON他们正确地到达。我也尝试URL解码参数,但结果不正确。也许我错过了什么。我会再看一遍。是的,似乎ExtJS的URL编码PARAMS
EDIT2:
好吧,我发现更多。我比较了发布数据的实际内容。它是这样的:
Delphi 2006 (Indy10): FirstName=%C4%8D
Delphi 2010 (Indy10): FirstName=%C4%8D
在这两种情况下,未分析的参数是相同的。我有ParseParams打开并在BDS2006 他们正确解析,但在2010年他们不是。这是Indy10与德尔福组合。这个版本有错误吗?或者我做错了什么?
EDIT3:
我下载了最新的每日构建OD Indy10。仍然是同样的问题。
EDIT4:
我不得不接受我自己的答案。
即使在VCL的Ansi版本中,TIdHTTPServer的解码功能也存在尚未解决的已知问题。 – 2010-03-05 01:39:14
感谢您的信息。我担心我做错了什么:) – Runner 2010-03-05 07:01:21