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

标签 c# linq-to-xml

我正在创建这样的 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 相匹配的构造器
  • 也允许在构造函数中指定编码

关于c# - 为什么 Xdocument 给我一个 utf16 声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5248400/

相关文章:

c# - 如何写出派生类的内容列表

c# - 控制台应用程序中的 Application.Current "null"

c# - 围绕现有 XDocument 包装附加元素

c# - 这两个 XML LINQ 查询有什么区别?

c# - 使用 XDocument.Parse 时保留回车

c# - 托管可扩展性框架

c# - yield return new WaitForSeconds(2) 销毁函数

c# - 如何对通用约束进行分组?

c# - 使用 linq 读取属性值

c# - 如何获取具有特定属性的所有后代 - Linq to Xml