why does the Xdocument give me a utf16 declaration?

有些话、适合烂在心里 提交于 2020-07-31 17:18:57

问题


i'm creating a XDocument like this:

XDocument doc = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"));

when i save the document like this (doc.Save(@"c:\tijd\file2.xml");) , i get this:

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

which is ok.

but i want to return the content as xml, and i found the following code:

 var wr = new StringWriter(); 
            doc.Save(wr); 
            string s = (wr.GetStringBuilder().ToString());

this code works, but then the string 's' starts with this:

<?xml version="1.0" encoding="utf-16" standalone="yes"?>

so it changed from utf8 to utf16, and that's not what i want, because now i can't read it in internet explorer.

Is there a way to prevent this behaviour?


回答1:


StringWriter advertises itself as using UTF-16. It's easy to fix though:

public class Utf8StringWriter : StringWriter
{
    public override Encoding Encoding { get { return Encoding.UTF8; } }
}

That should be enough in your particular case. A rather more well-rounded implementation would:

  • Have constructors matching those in StringWriter
  • Allow the encoding to be specified in the constructor too



回答2:


Very good answer using inheritance, just remember to override the initializer

   public class Utf8StringWriter : StringWriter
    {
        public Utf8StringWriter(StringBuilder sb) : base (sb)
        {
        }
        public override Encoding Encoding { get { return Encoding.UTF8; } }
    }



回答3:


You will need to set the StreamWriter.Encoding to use UTF-8 instead of Unicode (UTF-16)

Seeing as it's not a StreamWriter this answer is only left for posterity.



来源:https://stackoverflow.com/questions/5248400/why-does-the-xdocument-give-me-a-utf16-declaration

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!