2011-03-14 37 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那樣的固有編碼。