【问题标题】:How do I get encoding = "utf-8"?> in a txmldocument.xml?如何在 txmldocument.xml 中获取 encoding = "utf-8"?>?
【发布时间】:2013-10-24 16:59:52
【问题描述】:

这对我在 Delphi XE2 中不起作用。

Var
  XMLDoc : IXMLDOCUMENT;
begin
  XMLDoc := NewXMLDocument;
  XMLDoc.Active := True;
  XMLDoc.Version := '1.0';
  XMLDoc.Encoding := 'utf-8';
  XMLDoc.Options := [doNodeAutoIndent];
  Memo1.Text := XMLDoc.XML.Text;

我仍然没有在结果文档中得到encoding="utf-8"?>。但是如果我说

  XMLDoc.Encoding := 'utf-16';

然后我在生成的文档中得到encoding="utf-16"?>

有什么想法吗?有人吗?

【问题讨论】:

    标签: delphi txmldocument


    【解决方案1】:

    当没有 encoding 属性或 BOM 表示正在使用不同的编码时,UTF-8 是 XML 的默认编码。底层 XML 引擎知道这一点,因此当它知道这样做是安全的时,它将省略为 UTF-8 生成 encoding 属性。

    AFAIK,没有办法强制 IXMLDocument.XML.TextIXMLDocument.SaveToXML(var XML: DOMString)IXMLDocument.SaveToXML(var XML: WideString) 为 UTF-8 生成 encoding 属性。但是,IXMLDocument.SaveToXML(var XML: UTF8String)IXMLDocument.SaveToStream() 会为 UTF-8 生成 encoding 属性。

    【讨论】:

    • 感谢 SO 上的其他帖子,我发现问题出在 UFT-16 的 Memo1.Text 上。通过将最后一行更改为XMLDoc.SaveToStream(MyStream),其中MyStream := TFileStream.Create('test.XML', fmCreate or fmOpenWrite);,utf-8 指示符包含在结果文件中。耶。
    猜你喜欢
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多