yoganathan k
yoganathan k

Reputation: 209

Why XDocument encoding type changed while use XDocument's WriteTo method

I have used XDocument to create simple xml document.I have created document with XDocument and XDeclaration.

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

If i save this document to file means the encoding type is not changed.

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

Output:

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

But,if I use XDocument's WriteTo method to print the xml means encoding type is changed.

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

Output:

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

Why this happened?.Please update your answers.Thanks in advance.

Upvotes: 0

Views: 239

Answers (1)

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726549

If you look at the reference source for XmlWriter.Create, the chain of calls would eventually lead to this constructor:

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

The assignment encoding = w.Encoding provides an explanation to what is happening in your case: the Encoding setting of the Console.Out text writer is copied to the encoding setting of the newly created XmlTextWriter, replacing the encoding that you supplied in the XDocument.

Upvotes: 2

Related Questions