Delphi:如何防止 MSXML 以 UTF-8 编码已编码的 XML

标签 delphi

我使用字符串列表来制作一个简单的 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 编码两次。我认为问题与 MSXML 有关,默认情况下,MSXML 以 UTF-8 进行编码(通过 MSXML.save())。

所以我需要的是以某种方式让 MSXML 不对 XML 进行编码,而是具有 header

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

最佳答案

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

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

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

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

关于Delphi:如何防止 MSXML 以 UTF-8 编码已编码的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17107253/

相关文章:

ios - 使用Application Loader上载IPA时无效的启动镜像错误上传,错误ITMS-90094

Delphi - 获取备忘录中插入符号所在的整个单词

delphi - 为什么 DEP 不会停止执行从外部文件加载的部分代码?

delphi - 向所有连接的客户端发送命令

vba - 如何调用 Documents.open 并避免 'file in use' 对话框?

delphi - 禁用 vcl 控件上的热键

delphi - 检测Skype是否位于 "Compact View"或 "Default View"

delphi - 我不应该将接口(interface)作为 const 传递吗?

c# - Array.copy 从 C# 到 Delphi

delphi - VirtualTreeview 拖放以排列列表中的节点