我需要使用ISO Latin 1编码,但使用编写器设置下面的代码默认返回UTF8。我在这里缺少什么?
XmlDocument xmlDoc = new XmlDocument();
XmlWriterSettings settings = new XmlWriterSettings();
settings.ConformanceLevel = ConformanceLevel.Auto;
settings.Encoding = System.Text.Encoding.GetEncoding(28591);
using (XmlWriter writer = XmlWriter.Create(xmlDoc.CreateNavigato().AppendChild(), settings))
{
}
答案 0 :(得分:1)
问题是底层流(在本例中为xmlDoc
对象)使用的是UTF-8,这是.NET中的默认编码。
来自XmlWriterSettings的Encoding property的MSDN文档:
Encoding属性仅适用于使用指定的Stream或指定的文件名创建的XmlWriter实例。如果使用指定的TextWriter创建XmlWriter实例,则底层TextWriter的编码将覆盖Encoding属性。例如,如果此属性设置为特定XmlWriter的Unicode(UTF-16),但底层编写器是StreamWriter(派生自TextWriter),其编码设置为UTF-8,则输出将为UTF-8编码
要解决此问题,您需要使用Latin-1编码的流创建XmlWriter
。我认为你不能使用XmlDocument
。