c# - 如何更改 TextWriter 对象中的编码?

标签 c# xml encoding utf-8 linq-to-xml

我有 xml,我在另一个 resurse 中通过 API 发送了它。我通过 XDocument 创建它:

XDocument xDoc = new XDocument(
    new XDeclaration("1.0", "utf-8", "yes"),
    new XElement("Entity",new XAttribute("Type", "attribute1"),
        new XElement("Fields",...

当我把它放在请求中时,它没有声明就发送了。所以我接下来要做的是:

StringBuilder builder = new StringBuilder();
TextWriter writer = new StringWriter(builder);

using (writer)
{
    xDoc.Save(writer);
}

但现在 TextWriter 将 xml 中的编码更改为 utf-16。我需要在 utf-8 上再次更改它。

最佳答案

这看起来很奇怪,但是如果你想输出到 xml 中使用 utf-8 编码的 string,你似乎必须子类化 StringWriter

public class Program
{
    public static void Main(string[] args)
    {
        XDocument xDoc = new XDocument(
            new XDeclaration("1.0", "utf-8", "yes"),
            new XElement("Entity",new XAttribute("Type", "attribute1")));

        StringBuilder builder = new StringBuilder();
        using (TextWriter writer = new EncodingStringWriter(builder, Encoding.UTF8))
        {
            xDoc.Save(writer);
        }

        Console.WriteLine(builder.ToString());
    }
}

public class EncodingStringWriter : StringWriter
{
    private readonly Encoding _encoding;

    public EncodingStringWriter(StringBuilder builder, Encoding encoding) : base(builder)
    {
        _encoding = encoding;
    }

    public override Encoding Encoding
    {
        get { return _encoding;  }                
    }
}

关于c# - 如何更改 TextWriter 对象中的编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14743310/

相关文章:

javascript - javascript转义的替代品?

linux - 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

python - 将int转换为具有可变字节长度的字节

c# - 我应该将 StreamReader/Writer 与 NetworkStream 一起用于 C# 服务器/客户端吗?

javascript - fetch(或 AJAX Get)返回 html,但 Postman 从 feedburner 返回 xml

android - CardView 不显示阴影高程

php - 如何使外部XML文件在浏览器中良好显示?

c# - 在 C# 中,如何获取输出文件中每个文本行的文件位置(在写入时)?

c# - string.Empty 可以等于 null 吗?

c# - 有什么方法可以将JSON查询转换为Elasticsearch Nest搜索查询吗?