2

我正在使用字符串列表制作一个简单的 xml,在其中通过 Add 插入节点以制作 UTF8 编码的 xml

例如。

    myXML.Add('<myNode>'+UTF8Encode('υτφ8στρινγ')+'</myNode>');

但是我想切换到 IXMLDocument 表单更干净的代码和多功能性

我在 Delphi 中制作一个简单的 xml

procedure myxml;
var
  xmlDoc : IXMLDocument;
  xNode : IXMLNode;
begin
  xmlDoc := TXMLDocument.Create(nil);
  try
    xmlDoc.Active := TRUE;
    xmlDoc.Version := '1.0';
    xmlDoc.Encoding := 'utf-8';
    xNode := xmlDoc.AddChild('myNode');
    xNode.Text := UTF8Encode('υτφ8στρινγ'); //greek chars
    xmlDoc.XML.SaveToFile('test.xml');  
  finally
    FreeAndNil(xmlDoc);
  end;
end;

问题是输出 XML 以 UTF-8 编码两次。我相信这个问题与默认情况下以 UTF-8 编码(通过 MSXML.save())的 MSXML 有关。

所以我需要以某种方式让 MSXML 不对 XML 进行编码,但有标题

    <?xml version="1.0" encoding="utf-8"?>
4

1 回答 1

2

问题是您不应该执行任何 UTF-8 编码。将字符串传递给 XML 库,并让它进行编码。所以,更换

xNode.Text := UTF8Encode('υτφ8στρινγ');

xNode.Text := 'υτφ8στρινγ';

您必须删除对 的调用FreeAndNil。您正在传递一个接口引用,并且FreeAndNil用于对象实例引用。只需将其删除,然后让接口引用计数代码完成其工作。

于 2013-06-14T11:42:18.043 回答