为什么TXmlDocument在序列化为字符串时省略了编码?

时间:2012-06-05 06:21:50

标签: xml delphi encoding

如果我是逐行构建XML,我可以设置编码,但是当我从文件加载时,我无法添加编码。参见:

procedure TForm1.Button1Click(Sender: TObject);
var
    x : TXMLDocument;
    s : string;
    w : WIdeString;
begin
    s := '<?xml version="1.0"?><a><b/></a>';
    x := TXMLDocument.Create(Self);
    x.XML.Text := s;
    x.Active := True;
    x.Encoding := 'UTF-8';
    x.DocumentElement.childNodes['b'].attributes['x'] := '1';
    x.SaveToXML(w);
    ShowMessage(w);
end;

有趣的是结果中缺少“编码”部分!

如何使结果包含XML编码?

1 个答案:

答案 0 :(得分:4)

您将XML保存为WideString。根据定义,WideString是UTF16编码的,因此在指定其他编码时没有任何意义。 IIRC,你可以指定一个encoding="UTF-16",不会被删除,因为它就是这样。

但是,如果您因此将XML文档保存到流中,则可以指定不同的编码。