XslCompiledTransform использует кодировку UTF-16 - PullRequest
9 голосов
/ 14 марта 2011

У меня есть следующий код, который я хочу выводить данные XML с использованием формата кодировки UTF-8. но он всегда выводит данные в формате UTF-16:

        XslCompiledTransform xslt = new XslCompiledTransform();

            xslt.Load(XmlReader.Create(new StringReader(xsltString), new XmlReaderSettings()));

            StringBuilder sb = new StringBuilder();

            XmlWriterSettings writerSettings = new XmlWriterSettings();
            writerSettings.Encoding = Encoding.UTF8;
            writerSettings.Indent = true;

            xslt.Transform(XmlReader.Create(new StringReader(inputXMLToTransform)), XmlWriter.Create(sb, writerSettings));

Ответы [ 2 ]

13 голосов
/ 14 марта 2011

Вывод XML будет содержать заголовок, который основан на кодировке потока, а не на кодировке, указанной в настройках. Поскольку строки имеют 16-битный юникод, кодировка будет UTF-16. Обходной путь - подавить заголовок и добавить его самостоятельно:

writerSettings.OmitXmlDeclaration = true;

Затем, когда вы получите результат от StringBuilder:

string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + sb.ToString();
7 голосов
/ 18 мая 2011

Если вы используете MemoryStream вместо StringBuilder, XmlWriter будет учитывать кодировку, указанную вами в XmlWriterSettings, поскольку MemoryStream не имеет встроенной кодировки, такой как StringBuilder делает.

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