Delphi TIdHttp.Get转换丹麦语和瑞典语字母

Delphi TIdHttp.Get转换丹麦语和瑞典语字母,delphi,delphi-xe,indy,Delphi,Delphi Xe,Indy,我遇到了一个奇怪的问题,我找不到任何答案 我们使用Delhi XE1和一个TidHttp.Get(…)转换这些字母: æåÆØäÄÖ 对于这些错误的字母: aoa aoa ao 哪种原因最终给了我们一个错误的URL。我怀疑可能涉及到一些unicode问题,但有人知道如何解决这个问题吗?我在调用TidHTTP.Get(…)时提供的URL是正确的,但是目标服务器获取了错误的字母。印地如何转换这些字母 我不能发布任何编码样本 致以最良好的祝愿, Brian Andersen返回字符串的TIdHTTP.

我遇到了一个奇怪的问题,我找不到任何答案

我们使用Delhi XE1和一个TidHttp.Get(…)转换这些字母:

æåÆØäÄÖ

对于这些错误的字母: aoa aoa ao

哪种原因最终给了我们一个错误的URL。我怀疑可能涉及到一些unicode问题,但有人知道如何解决这个问题吗?我在调用TidHTTP.Get(…)时提供的URL是正确的,但是目标服务器获取了错误的字母。印地如何转换这些字母

我不能发布任何编码样本

致以最良好的祝愿,
Brian Andersen

返回
字符串的
TIdHTTP.Get()
版本使用服务器响应中指定的字符集将服务器的原始数据转换为Unicode,如果未检测到字符集,则转换为默认值。您遇到的症状是由于使用错误的字符集将原始数据转换为Unicode引起的。由于没有显示实际的HTTP响应数据,因此很难判断HTTP响应或
TIdHTTP
是否有故障。但是,XE1有点老了,从那时起Indy的字符集处理发生了变化,因此您应该升级到Indy的最新版本,看看问题是否仍然存在。

谢谢您的回答。我担心的不是这种反应。我发出的请求是错误的。当THttp.Get的参数值(调试时正确)包含丹麦语或瑞典语字母时,它们将被转换为错误的内容。Indy转换这些字母。2013年10月8日Indy的最新SVN也没有解决字母转换问题。更正:我没有使用最新版本。它现在已正确安装。现在这些字母被错误地翻译成了?????。这意味着您仍然在使用错误的字符集对字符进行编码。请更新您的问题,以显示您的实际代码和您试图发送到服务器的实际数据。使用
GET
发送数据的唯一方法是通过URL,URL允许的字符非常有限。数据需要进行字符集编码(通常使用UTF-8,但并不总是如此)和URL编码(将非ASCII和保留的八位字节转换为
%HH
符号)。创建URL时必须手动执行所有这些操作,例如使用
TIdURI.URLEncode()
TIdHTTP
不会自动为您执行此操作。嗨,雷米。你说得对。在我在这里发布之前,我确实尝试转换成十六进制,但失败了。我后来发现,我不应该在完整的URL上转换非ascii,而应该只在URL参数值上转换。这很有道理;o)