【问题标题】:How to decode/encode XML?如何解码/编码 XML?
【发布时间】:2014-07-20 07:13:53
【问题描述】:

我正在向 XML 文档发送请求,然后我需要解析一些数据,有时在这个文档中是这样的符号:

如果此符号在此文档中 - 数据不会记录到我的字符串变量中...

对不起我的英语不好......

var
response:string;
begin
response:=IdHTTP1.GET('http:// site.com/document.xml');
// parsing data...
end;

如何解码/编码这个符号?这是此符号的编码/解码变体(例如) - ???? ('𞉀') (XML 文档中的数字一直在变化) - 这向我展示了在线解码器/编码器,但是如何在 Delphi 中对其进行编码/解码?

【问题讨论】:

  • 我使用了 XMLDocument 组件,现在我有了“??” ,我怎样才能将它解码/编码成这样的代码 𞉀 ?

标签: xml delphi-7


【解决方案1】:

XML 对字符集敏感,因此作为字符集编码字节传输。您正在将 XML 下载为 AnsiString(因为您使用的是 Ansi 版本的 Delphi),因此 TIdHTTP.Get() 会将原始字节解码为 Unicode,然后在返回给您时将其转换为 Ansi。这会改变/破坏 XML 内容,或者至少使 XML 内容与 XML 的序言不兼容(Indy 在这些转换过程中不会改变)。

在处理 XML 时,应为 XML 解析器提供与服务器发送的完全相同的原始 XML 数据。让解析器而不是 Indy 来处理 XML 的原始字节。为此,请使用下载到TStreamTIdHTTP.Get() 的重载版本,而不是返回String。下载到TMemoryStream,然后传给XMLDocument.LoadFromStream()方法,例如:

var
  response: TMemoryStream;
begin
  response := TMemoryStream.Create;
  try
    IdHTTP1.GET('http://example.com/document.xml', response);
    response.Position := 0;
    // parsing data...
  finally
    response.Free;
  end;
end;

【讨论】:

    猜你喜欢
    • 2012-07-04
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 2018-05-19
    • 2019-04-26
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多