【问题标题】:What is the correct encoding for Indy Tidhttp for posting XML Files?Indy Tidhttp 发布 XML 文件的正确编码是什么?
【发布时间】:2013-05-16 14:27:04
【问题描述】:

我注意到我在使用 Indy Client 的应用程序中的 XML 文件有无效字符(我实际上使用 IdHttp 的默认参数)

这是我的代码:

  ts := TStringList.Create;
  try
    ts.Add('XML=' + AXMLDoc.XML.Text));
    HTTPString := IdHTTPClient.Post('http://' + FHost + ':' + IntToStr(FPort) + FHttpRoot, ts);
  finally
    ts.Free;
  end;

我的 XML 文件是 UTF-8 编码的。

我必须做什么才能在我的服务器上获得良好的编码(我也使用 Indy 作为服务器)?

【问题讨论】:

  • 使用 XML 标头中 encoding 属性值中的内容。如果是 UTF-8,那么我会尝试 this code
  • 用 UTF-8 编码

标签: delphi delphi-xe2 idhttp delphi-xe4 txmldocument


【解决方案1】:

UTF-8 是TIdHTTP 用于提交TStringList 对象的默认字符集。真正的问题是 XML 不应该使用 TStringList 开始提交,即使使用正确的字符集也是如此。原因是TIdHTTP.Post(TStrings) 方法实现了application/x-www-form-urlencoded 内容类型,因此对TStringList 内容进行了url 编码,如果接收者不希望这样,这可能会破坏XML。因此,除非接收者实际上期待真正的 application/x-www-form-urlencoded 编码请求,否则应使用 TIdHTTP.Post(TStream) 方法传输 XML,以便原样保留原始 XML 字节。

【讨论】:

  • 它现在在 Windows 上运行良好 :) 它为 iOS 编译,但是当我尝试在 iOS 上执行时,它会导致 HTTP 500 内部服务器错误:可能是什么错误?
  • 如果不比较来自两个平台的实际 HTTP 请求数据,就无法知道。您是如何准确地创建和提交 XML 的?
  • XML 是一个 TXMLDocument,我是这样制作的 pastebin.com/PXq4vC1Z 它是一个组件,用于 Win32 和 iOS
  • TStringStream 使用SysUtils.TEncoding,因此如果您不使用正确的编码,它也会损坏 XML。 XML 默认为 UTF-8,因此请尝试在 TStringStream 构造函数中指定 TEncoding.UTF8
  • 再次,您需要捕获两个平台传输的原始 HTTP 请求数据,并比较它们是否存在差异。缺少必需的参数,或者 XML 的编码方式不同,等等。 500 回复通常意味着服务器遇到严重错误,通常是由于输入错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多