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