我有一个问题我不知道如何解决。
我有一个 Indy10 HTTP 服务器。我在许多应用程序中都使用过 Indy9 和 Indy10 HTTP 服务器,从来没有遇到过任何问题。但现在我正在使用带有 ExtJS javascript RAI 框架的 Indy10 HTTP 服务器。
问题是当我提交包含非 ansi 字符的数据时。例如,当我在 1250 代码页(斯洛文尼亚语、克罗地亚语...)中提交字母“č”时,我在 Indy 的“未解析参数”->“%C4%8D”下得到以下信息。这是 utf-8 编码中“č”字母的正确十六进制表示。我所有的页面都是 utf-8,而且我在向 Indy 提交表单数据时从来没有遇到任何问题。我调试了代码,发现我实际上得到了一个这样的字节序列:[37、67、52、37、56、68]。这是字符串“%C4%8D”的字节表示。但当然 Indy 无法将其正确编码为 UTF-16。举个例子。实际的表单域:
FirstName=črt
提交时是这样的:
FirstName=%C4%8Drt
我不知道如何解决这个问题。我查看了 ExtJS 论坛,但没有关于这个主题的内容。有人知道这种问题吗?
编辑:
如果我对参数和 JSON 进行编码,它们会正确到达。我也尝试对参数进行 URL 解码,但结果不正确。也许我错过了什么。我会再看看这个。是的,ExtJS URL 似乎对参数进行了编码
编辑2:
好的,我发现了更多。我比较了post数据的实际内容。它是这样的:
Delphi 2006 (Indy10): FirstName=%C4%8D
Delphi 2010 (Indy10): FirstName=%C4%8D
在这两种情况下,未解析的参数都是相同的。我打开了 ParseParams 并且在 BDS2006 中它们被正确解析,但在 2010 年它们不是。这是带有 delphi 的 Indy10。这个版本有错误还是我做错了什么?
编辑3:
我下载了最新的夜间版本 od Indy10。还是同样的问题。
编辑4:
我被迫接受我自己的答案。