【发布时间】:2010-11-02 03:04:46
【问题描述】:
我有以下代码:
var doc = new XmlDocument();
XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
doc.AppendChild(xmlDeclaration);
XmlElement root = doc.CreateElement("myRoot");
doc.AppendChild(root);
root.InnerText = "myInnerText";
StringWriter sw = new StringWriter();
doc.Save(sw);
Console.WriteLine(sw.ToString());
Console.WriteLine();
MemoryStream ms = new MemoryStream();
doc.Save(ms);
Console.WriteLine(Encoding.ASCII.GetString(ms.ToArray()));
这是输出:
<?xml version="1.0" encoding="utf-16"?>
<myRoot>myInnerText</myRoot>
???<?xml version="1.0" encoding="UTF-8"?>
<myRoot>myInnerText</myRoot>
基本上它的作用是创建一个 xml 文件,并将编码设置为 utf8,但是当它将它保存到 stringwriter 时,它会忽略我的编码并使用 utf16。但是,当使用内存流时,它使用 utf8(带有额外的 BOM 字符)
这是为什么?为什么它不尊重我的 utf-8 显式编码设置?
非常感谢
【问题讨论】:
-
只是好奇,您是否尝试在编码中给出 null/string.empty 并查看??
-
如果我这样做,stringwriter 仍然是 utf16,并且 memorystream 在其声明中没有编码。
-
例如。它看起来像这样: