繁体   English   中英

如何在TextWriter对象中更改编码?

[英]How to change encoding in TextWriter object?

我有一个xml,我通过API在另一个resurse发送。 我是通过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;  }                
    }
}

尝试

TextWriter ws = new StreamWriter(path, true, Encoding.UTF8);

要么

TextWriter ws = new StreamWriter(stream, Encoding.UTF8);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM