XmlWriterSettings对由XmlDocument创建的XmlWriter没有影响。

3

我需要使用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))
{
}
1个回答

1
问题在于底层流(在本例中为xmlDoc对象)使用的是UTF-8编码,这是.NET的默认编码。
从MSDN对XmlWriterSettings的Encoding property的文档中可以得知:

Encoding属性仅适用于使用指定Stream或指定文件名创建的XmlWriter实例。如果XmlWriter实例是使用指定的TextWriter创建的,则编码属性将被基础TextWriter的编码覆盖。例如,如果此属性对特定XmlWriter设置为Unicode(UTF-16),但基础编写器是编码设置为UTF-8的StreamWriter(它派生自TextWriter),则输出将为UTF-8编码。

为了解决这个问题,您需要使用拉丁字母-1编码的流来创建您的XmlWriter。我认为您不能使用XmlDocument来实现这一点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接