2011-03-14 49 views
7

我有下面的代码,我想用UTF-8编码格式输出xml数据。但它总是在UTF-16输出数据:XslCompiledTransform使用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)); 

回答

10

XML输出将包含基于所述流,而不是在设置中指定的编码的编码的报头。由于字符串是16位unicode,编码将是UTF-16。解决方法是抑制头部和自己添加它来代替:

writerSettings.OmitXmlDeclaration = true; 

然后,当你从StringBuilder的结果:

string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + sb.ToString(); 
7

如果您到位StringBuilder的使用MemoryStream,将XmlWriter将尊重您在XmlWriterSettings中指定的编码,因为MemoryStream没有像StringBuilder那样的固有编码。