我注意到使用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作为服务器)?
答案 0 :(得分:4)
UTF-8是TIdHTTP
用于提交TStringList
对象的默认字符集。真正的问题是,即使使用适当的字符集,也不应该使用TStringList
来提交XML。原因是因为TIdHTTP.Post(TStrings)
方法实现了application/x-www-form-urlencoded
内容类型,因此对TStringList
内容进行url编码,如果接收者不期望这样,则可以破坏XML。因此,除非接收器实际上期望真正的application/x-www-form-urlencoded
编码请求,否则应使用TIdHTTP.Post(TStream)
方法传输XML,以便原始XML字节保持原样。