2017-09-14 58 views
0

我已經使用XDocument來創建簡單的xml文檔。我使用XDocument和XDeclaration創建了文檔。爲什麼使用XDocument的WriteTo方法更改了XDocument編碼類型

XDocument encodedDoc8 = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), 
new XElement("Root", "Content")); 

如果我將此文檔保存到文件意味着編碼類型不會更改。

using (TextWriter sw = new StreamWriter(@"C:\sample.txt", false)){ 
    encodedDoc8.Save(sw); 
} 

輸出:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<Root>Content</Root> 

但是,如果使用的XDocument的的writeTo方法打印xml裝置編碼類型被改變。

using (XmlWriter writ = XmlWriter.Create(Console.Out)) 
{ 
    encodedDoc8.WriteTo(writ); 
} 

輸出:

<?xml version="1.0" encoding="IBM437" standalone="yes"?><Root>Content</Root> 

爲什麼發生這種情況。請提前更新answers.Thanks。

+0

[XML序列化,編碼]的可能重複(https://stackoverflow.com/questions/4928323/xml-serialization-encoding) –

+0

因爲'Console.Out.Encoding'將是IBM437 –

回答

2

如果你看一下reference sourceXmlWriter.Create,調用鏈最終將導致此構造函數:

public XmlTextWriter(TextWriter w) : this() { 
    textWriter = w; 
    encoding = w.Encoding; 
    xmlEncoder = new XmlTextEncoder(w); 
    xmlEncoder.QuoteChar = this.quoteChar; 
} 

分配encoding = w.Encoding提供了一個解釋什麼是你的情況發生了:Encoding設置的Console.Out將文本編寫器複製到新創建的XmlTextWriterencoding設置中,替換您在XDocument中提供的編碼。