Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi Indy Tidhttp发布XML文件的正确编码是什么?_Delphi_Delphi Xe2_Idhttp_Delphi Xe4_Txmldocument - Fatal编程技术网

Delphi Indy Tidhttp发布XML文件的正确编码是什么?

Delphi Indy Tidhttp发布XML文件的正确编码是什么?,delphi,delphi-xe2,idhttp,delphi-xe4,txmldocument,Delphi,Delphi Xe2,Idhttp,Delphi Xe4,Txmldocument,我注意到,在使用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

我注意到,在使用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作为服务器)?

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

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

使用XML头中
编码
属性值中的内容。如果它是UTF-8,那么我会试试。它是用UTF-8编码的,使用XML头中
编码
属性值中的内容。如果它是UTF-8,那么我会尝试。它是用UTF-8编码的,现在在Windows上运行良好:)它是为iOS编译的,但当我尝试在iOS上执行时,它会导致HTTP 500内部服务器错误:错误可能是什么?如果不比较两个平台的实际HTTP请求数据,就无法知道。您是如何创建和提交XML的?XML是一个TXMLDocument,我这样做的,它是一个组件,用于Win32和iOS
TStringStream
使用
SysUtils.TEncoding
,因此如果您不使用正确的编码,它也会损坏XML。XML默认为UTF-8,因此请尝试在
TStringStream
构造函数中指定
TEncoding.UTF8
。同样,您需要获取两个平台传输的原始HTTP请求数据的捕获,并比较它们是否存在任何差异。缺少必需的参数,或者XML编码不同,等等。500回复通常意味着服务器遇到严重错误,通常是由于输入错误。它现在在Windows上运行良好:)它为iOS编译,但当我尝试在iOS上执行时,它会导致HTTP 500内部服务器错误:错误可能是什么?如果不比较两个平台的实际HTTP请求数据,就无法知道。您是如何创建和提交XML的?XML是一个TXMLDocument,我这样做的,它是一个组件,用于Win32和iOS
TStringStream
使用
SysUtils.TEncoding
,因此如果您不使用正确的编码,它也会损坏XML。XML默认为UTF-8,因此请尝试在
TStringStream
构造函数中指定
TEncoding.UTF8
。同样,您需要获取两个平台传输的原始HTTP请求数据的捕获,并比较它们是否存在任何差异。缺少必需的参数,或者XML编码不同,等等。500回复通常意味着服务器遇到严重错误,通常是由于输入错误。