我正在创建这样的XDocument:

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

当我这样保存文档(doc.Save(@"c:\tijd\file2.xml");)时,我得到了:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>

没关系

但我想将内容返回为xml,然后发现以下代码:
 var wr = new StringWriter();
            doc.Save(wr);
            string s = (wr.GetStringBuilder().ToString());

这段代码有效,但是字符串“s”以此开头:
<?xml version="1.0" encoding="utf-16" standalone="yes"?>

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

有办法防止这种行为吗?

最佳答案

StringWriter标榜自己使用的是UTF-16。修复起来很容易:

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

在您的特定情况下,这应该足够了。一个更全面的实现将:
  • 具有与StringWriter匹配的构造函数
  • 也允许在构造函数中指定编码
  • 10-08 08:48