私は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();
}
私が見逃している単純なものでなければなりませんか?
コードがコンパイルされない-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
はデフォルト(null)値のままになっています。つまり、Encoding
はnullを返すため、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; }
}
}
StringWriterWithEncodingの代わりにXmlWriterの出力ファイル名を使用するだけです。
var settings = new XmlWriterSettings
{
Encoding = Encoding.UTF8,
Indent = true
};
using (var writer = XmlWriter.Create(filePathName, settings))
{
...