XmlWriter在C#中使用StringWriter编码UTF-8 [英] XmlWriter encoding UTF-8 using StringWriter in C#
问题描述
我正在使用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屋!