为什么Xdocument给我一个utf16声明?

Mic*_*hel 30 c# linq-to-xml

我正在创建一个这样的XDocument:

XDocument doc = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"));
Run Code Online (Sandbox Code Playgroud)

当我像这样(doc.Save(@"c:\tijd\file2.xml");)保存文档时,我得到这个:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
Run Code Online (Sandbox Code Playgroud)

没关系.

但我想将内容作为xml返回,我发现以下代码:

 var wr = new StringWriter(); 
            doc.Save(wr); 
            string s = (wr.GetStringBuilder().ToString());
Run Code Online (Sandbox Code Playgroud)

这段代码有效,但字符串'''以这个开头:

<?xml version="1.0" encoding="utf-16" standalone="yes"?>
Run Code Online (Sandbox Code Playgroud)

所以它从utf8变为utf16,这不是我想要的,因为现在我无法在Internet Explorer中阅读它.

有没有办法防止这种行为?

Jon*_*eet 38

StringWriter宣传自己使用UTF-16.虽然很容易修复:

public class Utf8StringWriter : StringWriter
{
    public override Encoding Encoding { get { return Encoding.UTF8; } }
}
Run Code Online (Sandbox Code Playgroud)

在您的特定情况下,这应该足够了.一个相当全面的实现将:

  • 有构造函数匹配的那些 StringWriter
  • 允许在构造函数中指定编码

  • @Michel:基本上Save方法*询问作者使用什么编码,以便它可以使用任何合适的.这有点乱,我同意...... (3认同)