XmlWriter在C#中使用StringWriter编码UTF-8 [英] XmlWriter encoding UTF-8 using StringWriter in C#

查看:1031
本文介绍了XmlWriter在C#中使用StringWriter编码UTF-8的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用C#输出xml文件,而我正在尝试将xml编码值设置为UTF-8,但当前正在输出:

I'm using C# to output an xml file and Im trying to set the xml encoding value to UTF-8 but its currently outputting:

<?xml version="1.0"?>

这是我的代码:

public sealed class StringWriterWithEncoding: StringWriter {
    private readonly Encoding encoding;

    public StringWriterWithEncoding(Encoding encoding) {
        this.encoding = encoding;
    }

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

private string GetXml(JobStore jobStore) {
    StringWriterWithEncoding sw = new StringWriterWithEncoding();
    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Encoding = Encoding.UTF8;
    settings.Encoding = Encoding.GetEncoding("utf-8");
    settings.Indent = true;
    using(var writer = XmlWriter.Create(sw, settings)) {
        writer.WriteStartDocument();
        writer.WriteStartElement("resources");

        writer.WriteStartElement("string");
        writer.WriteAttributeString("name");
        writer.WriteCData("value");
        writer.WriteEndElement();

        writer.WriteEndElement();
        writer.WriteEndDocument();
    }
    return sw.ToString();
}

一定是我想念的简单东西吗?

Must be something simple I am missing?

推荐答案

您的代码无法编译-StringWriterWithEncoding没有无参数的构造函数.或者,如果它确实具有无参数的构造函数,也许实际上看起来像这样?

Your code does not compile -- StringWriterWithEncoding does not have a parameterless constructor. Or, if it does have a parameterless constructor, maybe it actually looks like this?

public sealed class StringWriterWithEncoding : StringWriter
{
    private readonly Encoding encoding;

    public StringWriterWithEncoding() { }

    public StringWriterWithEncoding(Encoding encoding)
    {
        this.encoding = encoding;
    }

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

如果是这样,那就可以解释您的问题-字段encoding保留为默认值(null),这意味着Encoding返回null,因此XML文件中不会出现任何编码.

If so, that would explain your problem - the field encoding has been left at its default (null) value, meaning Encoding returns null, and so no encoding will appear in the XML file.

要解决此问题,请消除无参数构造函数,然后执行以下操作:

To fix it, eliminate the parameterless constructor, and do:

var sw = new StringWriterWithEncoding(Encoding.UTF8);

或更改无参数构造函数以显式设置Encoding.UTF8:

Or change the parameterless constructor to explicitly set Encoding.UTF8:

public sealed class StringWriterWithEncoding : StringWriter
{
    private readonly Encoding encoding;

    public StringWriterWithEncoding() : this(Encoding.UTF8) { }

    public StringWriterWithEncoding(Encoding encoding)
    {
        this.encoding = encoding;
    }

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

这篇关于XmlWriter在C#中使用StringWriter编码UTF-8的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆