MSXML删除encoding =" UTF-8"属性

时间:2014-12-24 08:17:56

标签: c++ xml encoding utf-8 msxml

我正在从文件中读取以下XML文本:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SampleXML>...</SampleXML>

我使用IXMLDomDocument :: loadXML加载UTF-8文本。然后我操纵XML并调用IXMLDomDocument :: Getxml()来获取修改后的XML的_bstr_t。这个_bstr_t如下所示:

<?xml version="1.0" standalone="yes"?>
<ModifiedSampleXML>...</ModifiedSampleXML>

标题中的encoding =“UTF-8”属性消失了。但是,如果我调用IXMLDomDocument :: save(FileName)将XML保存到文件,当我打开文件时,我看到encoding =“UTF-8”属性被保留。

为什么在调用Getxml()时,encoding =“UTF-8”属性不存在?如何告诉MSXML始终保留此属性? (不仅在保存时)

1 个答案:

答案 0 :(得分:1)

属性&#34; encoding =&#39; UTF-8&#39;&#34;被删除,因为Getxml()以宽字符(16位)字符串返回加载的XML。 您可以通过查看返回的_bstr_t所拥有的内存来验证这一点。

MSXML保留表示编码为8位的属性是不正确的,实际上它是16位。

但是,如果您加载了一个unicode xml文件,其中包含&#34; encoding =&#39; UTF-16&#39;&#34;属性,您会看到Getxml()不会删除该属性。