XmlWriter 在 C# 中使用 StringWriter 编码 UTF-8
XmlWriter encoding UTF-8 using StringWriter in C#
我正在使用 C# 输出一个 xml 文件,我试图将 xml 编码值设置为 UTF-8,但它当前输出:
<?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();
}
一定是我遗漏了一些简单的东西吗?
只需使用 XmlWriter 的输出文件名而不是 StringWriterWithEncoding:
var settings = new XmlWriterSettings
{
Encoding = Encoding.UTF8,
Indent = true
};
using (var writer = XmlWriter.Create(filePathName, settings))
{
...
您的代码无法编译 -- StringWriterWithEncoding
没有无参数构造函数。或者,如果它确实有一个无参数的构造函数,也许它实际上看起来像这样?
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
已保留其默认(空)值,这意味着 Encoding
returns 为空,因此不会进行任何编码出现在 XML 文件中。
要修复它,删除无参数构造函数,然后执行:
var sw = new StringWriterWithEncoding(Encoding.UTF8);
或更改无参数构造函数以显式设置 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; }
}
}
我正在使用 C# 输出一个 xml 文件,我试图将 xml 编码值设置为 UTF-8,但它当前输出:
<?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();
}
一定是我遗漏了一些简单的东西吗?
只需使用 XmlWriter 的输出文件名而不是 StringWriterWithEncoding:
var settings = new XmlWriterSettings
{
Encoding = Encoding.UTF8,
Indent = true
};
using (var writer = XmlWriter.Create(filePathName, settings))
{
...
您的代码无法编译 -- StringWriterWithEncoding
没有无参数构造函数。或者,如果它确实有一个无参数的构造函数,也许它实际上看起来像这样?
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
已保留其默认(空)值,这意味着 Encoding
returns 为空,因此不会进行任何编码出现在 XML 文件中。
要修复它,删除无参数构造函数,然后执行:
var sw = new StringWriterWithEncoding(Encoding.UTF8);
或更改无参数构造函数以显式设置 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; }
}
}