2011-03-14 12 views
7

Tengo el siguiente código, que quiero enviar datos xml utilizando el formato de codificación UTF-8. pero siempre da salida a los datos en UTF-16:XslCompiledTransform utiliza la codificación UTF-16

salida
 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)); 

Respuesta

10

El XML contendrá un encabezado que se basa en la codificación de la corriente, no la codificación especificada en la configuración. Como las cadenas son unicode de 16 bits, la codificación será UTF-16. La solución consiste en suprimir la cabecera y añadirlo a sí mismo en su lugar:

writerSettings.OmitXmlDeclaration = true; 

Entonces, cuando llegue el resultado de la StringBuilder:

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

Si utiliza un MemoryStream en lugar de la StringBuilder, el XmlWriter Respetará la codificación que especifique en el XmlWriterSettings, ya que el MemoryStream no tiene una codificación inherente como el StringBuilder.

Cuestiones relacionadas