我正在向XML文档发送请求,然后我需要解析一些数据,有时在这个文档中是这样的符号:
如果此符号在此文档中 - 数据不会记录到我的字符串变量...
抱歉我的英语不好......
var
response:string;
begin
response:=IdHTTP1.GET('http:// site.com/document.xml');
// parsing data...
end;
如何解码/编码此符号?这是这个符号的编码/解码变体(例如) - ?('&#123456')(数字在XML文档中一直在变化) - 这显示了我在线解码器/编码器,但是如何编码/解码它Delphi的?
答案 0 :(得分:2)
XML对字符集敏感,因此作为字符集编码的字节传输。您正在以AnsiString
的形式下载XML(因为您使用的是Ansi的Ansi版本),因此TIdHTTP.Get()
会将原始字节解码为Unicode,然后在返回给您时将其转换为Ansi。这可能会改变/破坏XML内容,或至少使XML内容与XML的序言不兼容(Indy在这些转换期间不会改变)。
在处理XML时,应该为XML解析器提供与服务器发送完全相同的原始XML数据。让解析器而不是Indy处理XML的原始字节。为此,请使用下载到TIdHTTP.Get()
的{{1}}的重载版本,而不是返回TStream
。下载到String
,然后将其传递给TMemoryStream
方法,例如:
XMLDocument.LoadFromStream()