Кодировка XmlWriter в C # - PullRequest
       1

Кодировка XmlWriter в C #

0 голосов
/ 18 февраля 2019

У меня есть XmlDocument, и я сохраняю его с XmlWriter, используя этот пост .Несмотря на то, что для Encoding установлено значение Utf-8 и файл сохраняется с кодировкой Utf-8, в действительности объявление xml в файле имеет "utf-16" в качествезначение атрибута encoding.

Я не вижу, где находится ошибка в моем коде:

StringBuilder sb = new StringBuilder();
XmlWriterSettings settings = new XmlWriterSettings
{
    Encoding=Encoding.UTF8
};
using (XmlWriter writer = XmlWriter.Create(sb, settings))
{
    xDoc.Save(writer);
}
using (
    StreamWriter sw = new StreamWriter(
        new FileStream(strXmlName, FileMode.Create, FileAccess.Write),
        Encoding.UTF8
    )
)
{
    sw.Write(sb.ToString());
}

1 Ответ

0 голосов
/ 18 февраля 2019

Причина этого кроется в вопрос, на который @dbc ссылается в комментариях : перегрузка XmlWriter.Create, которая принимает StringBuilder, создаст StringWriter, для которого установлена ​​кодировкадо UTF-16.

Однако в этом случае неясно, почему вы используете StringBuilder, когда ваша цель - запись в файл.Вы можете создать XmlWriter для файла напрямую:

var settings = new XmlWriterSettings
{
    Indent = true
};

using (var writer = XmlWriter.Create(strXmlName, settings))
{
    xDoc.WriteTo(writer);
}

Кодировка здесь по умолчанию будет UTF-8.

В качестве отступления, я бы посоветовал вам проверитьболее новые XDocument и друзья , это намного более дружественный API, чем XmlDocument.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...