求注 idhttp.post xml格式的数据时 服务器收到的是乱码(含有%3E')

okgxs 2015-02-01 01:19:28
delphi7,idhttp 调用java服务器接口上传数据:

发送前的xml.text 数据是正常的
//'<?xml version="1.0" encoding="utf-8"?>'#$D#$A'<Order><bodys><body dataId="111"></body></bodys></Order>

发送后数据变成了如下(变成%3E 编码了,什么问题导致的,很奇怪)
//<?xml version="1.0"%20encoding="utf-8"?%3E'#$D#$A'<Order><bodys><body dataId="111"/%3E%3C/bodys%3E%3C/Order%3E'#$D#$A

procedure TForm1.btn9Click(Sender: TObject);
begin
postXml('测试成功','http://192.168.8.1:1000/calldata?key=FFDDSSSSSSSS)
end;

function TForm1.postXml(const xmlstr, url: WideString): WideString;
var
idHttp:TIdHTTP;
sends:tstrings;
IdEncoderMIME1:TIdEncoderMIME;
s,ss:string;
begin
result:='';
try
idHttp:= TIdHTTP.Create(nil);
idhttp.AllowCookies:=false;
idhttp.HandleRedirects := true;
idhttp.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';
idhttp.Request.ContentType:='application/x-www-form-urlencoded; Charset=UTF-8';
idhttp.Request.Connection:='Keep-Alive';
idhttp.Request.Accept:='*/*';
idhttp.Request.ContentEncoding :='UTF-8' ;
idhttp.Request.AcceptCharSet := 'UTF-8';
idhttp.Request.AcceptEncoding := 'UTF-8';
sends:=tstringlist.Create;
ss := AnsiToUtf8('<?xml version="1.0" encoding="utf-8"?>') ;
//ss := ('<?xml version="1.0" encoding="utf-8"?>') ;
sends.Add(SS);
ss := AnsiToUtf8('<Order><bodys><body dataId="111"></body></bodys></Order>') ;
//ss := ('<Order><bodys><body dataId="111"></body></bodys></Order>') ;
sends.Add(SS);

sends.text;
//发送前输出的内容:sends.text;
//'<?xml version="1.0" encoding="utf-8"?>'#$D#$A'<Order><bodys><body dataId="111"></body></bodys></Order>'#$D#$A
result:=idhttp.Post(url,sends);
sends.text;
//发送后输出的内容sends.text (服务器端收到的内容):带有此%3E%3C格式的编码 如何处理
//<?xml version="1.0"%20encoding="utf-8"?%3E'#$D#$A'<Order><bodys><body dataId="111"/%3E%3C/bodys%3E%3C/Order%3E'#$D#$A
except
on E:Exception do
begin
result:=e.Message;
end;
end;
idHttp.Free;
sends.Free;
end;
...全文
284 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
okgxs 2015-02-03
  • 打赏
  • 举报
回复
引用 5 楼 linuxpingwangping 的回复:
idHttp.HTTPOptions :=idHttp.HTTPOptions - [hoForceEncodeParams];
不好意思,刚才理解错了;没错是把这个属性关掉就OK了,感谢困扰很久的问题。。。。结贴。。。
okgxs 2015-02-03
  • 打赏
  • 举报
回复
引用 5 楼 linuxpingwangping 的回复:
idHttp.HTTPOptions :=idHttp.HTTPOptions - [hoForceEncodeParams];
还是不行的啊,还是乱码
  • 打赏
  • 举报
回复
idHttp.HTTPOptions :=idHttp.HTTPOptions - [hoForceEncodeParams];
okgxs 2015-02-01
  • 打赏
  • 举报
回复
很奇怪的是,如果把中间的文本生成文件txt存一下,然后 用流模式发送 就可以了,不知道为什么? stream := TFileStream.Create('e:\t.xml', fmCreate); sends.SaveToStream(stream); result:=idhttp.Post(url,stream); //这样发送就可以了,如果不用这个流怎么办??
okgxs 2015-02-01
  • 打赏
  • 举报
回复
引用 2 楼 pathletboy 的回复:
ContentType改下面这个试试 idhttp.Request.ContentType := 'text/xml; Charset=UTF-8';
还是不行!!
pathletboy 2015-02-01
  • 打赏
  • 举报
回复
ContentType改下面这个试试 idhttp.Request.ContentType := 'text/xml; Charset=UTF-8';
okgxs 2015-02-01
  • 打赏
  • 举报
回复
在线等。。。。。

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧