1
XDocument xDocumentObject = XDocument.Parse("<Test>"+
            "<elementx id='1'  att='aaa' />" +
            "<elementx id='2'  att='bbb' />" +
            "</Test>");

和有什么区别:

1)

byte[] xmlBytes = Encoding.Default.GetBytes(xDocumentObject.ToString());

2)

byte[] xmlBytes;
using (MemoryStream ms = new MemoryStream())
{
   xDocumentObject.Save(ms);
   xmlBytes = ms.ToArray();
}

(1) 中的“默认”编码是什么,(2) 中使用的编码是什么,哪种是首选方式?

4

2 回答 2

2

在第一种情况下,您使用操作系统当前 ANSI 代码页的编码将字符串转换为字节数组。该字符串表示由XDocument实例生成并转换为字节数组的 XML 文档。在 .NET 中,所有字符串都是 Unicode 编码的。

在第二个示例中,使用了XDocument的编码。因此,例如,如果您有以下 XML <?xml encoding="utf-8"?>,它将使用 UTF-8。Declaration属性允许您指定正在使用的编码:

XDocument xDocumentObject = new XDocument(
    new XDeclaration("1.0", "utf-8", "yes"), 
    new XElement(
        "Test",
        new XElement("elementx", new XAttribute("id", "1"), new XAttribute("att", "aaa")), 
        new XElement("elementx", new XAttribute("id", "2"), new XAttribute("att", "bbb"))
    )
);

或者:

XDocument xDocumentObject = XDocument.Parse(
    @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
    <Test>
        <elementx id=""1"" att=""aaa"" />
        <elementx id=""2"" att=""bbb"" />
    </Test>"
);

允许您指定 UTF-8 编码。

于 2012-09-23T16:18:13.930 回答
1

1)你得到类的全名,这里用默认代码页编码的“System.Xml.XmlDocument”(类似于ascii,我电脑上的1byte /char)

2)只需看一下文档“编码属性的值取自 XmlDeclaration.Encoding 属性” http://msdn.microsoft.com/en-US/library/z5250dbd.aspx 该属性有一个默认值:“如果不包含编码属性,则在写入或保存文档时假定使用 UTF-8 编码。” http://msdn.microsoft.com/en-US/library/system.xml.xmldeclaration.encoding.aspx

于 2012-09-23T16:24:44.993 回答