XmlWriterSettings не влияют на XmlWriter, созданный из XmlDocument - PullRequest
3 голосов
/ 10 февраля 2010

Мне нужно использовать кодировку 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 голос
/ 10 февраля 2010

Проблема в том, что базовый поток (в данном случае объект xmlDoc) использует UTF-8, который является кодировкой по умолчанию в .NET.

Из документации MSDN свойства Кодировка из XmlWriterSettings:

Свойство Encoding применяется только к экземплярам XmlWriter, которые создаются либо с указанным потоком, либо с указанным именем файла. Если экземпляр XmlWriter создается с указанным TextWriter, свойство Encoding переопределяется кодировкой базового TextWriter. Например, если для этого свойства задано значение Unicode (UTF-16) для определенного XmlWriter, но базовым устройством записи является StreamWriter (производный от TextWriter) с его кодировкой UTF-8, выходные данные будут закодированы в UTF-8 .

Чтобы решить эту проблему, вам нужно создать XmlWriter с потоком, закодированным в Latin-1. Я не думаю, что вы можете использовать XmlDocument для этого.

...