Tengo un archivo XML y necesito producir un archivo HTML con codificación Windows-1251 aplicando XSL Transformation. Un problema es que los caracteres Unicode de XSL -file no se convierten a HTML Unicode Escape Sequence como "& # 1171;" durante la Transformación XSL, solo "?" signo está escrito en lugar de ellos. ¿Cómo puedo solicitar el método XslCompiledTransform.Transform para hacer esta conversión? ¿O hay algún método para escribir HTML-string en el archivo HTML de Windows-1251 con la aplicación de HTML Unicode Escape Sequences, de modo que pueda realizar Transformación XSL en cadena y luego mediante este método escribir en un archivo con codificación Windows-1251 y con HTML -escapar todos los caracteres Unicode (algo así como Convertir ("ғ") devolverá "& # 1171;")?Unicode a Windows-1251 Conversión con XML (HTML) -escaping
XmlReader xmlReader = XmlReader.Create(new StringReader("<Data><Name>The Wizard of Wishaw</Name></data>"));
XslCompiledTransform xslTrans = new XslCompiledTransform();
xslTrans.Load("sheet.xsl");
using (XmlTextWriter xmlWriter = new XmlTextWriter("result.html", Encoding.GetEncoding("Windows-1251")))
{
xslTrans.Transform(xmlReader, xmlWriter); // it writes Windows-1251 HTML-file but does not escape unicode characters, just writes "?" signs
}
¡Gracias a todos por su ayuda!
ACTUALIZACIÓN
Mi etiqueta de configuración de salida de archivo XSL-:
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
ni siquiera me esperan ahora que XSL va a satisfacer mis necesidades. Pero me pregunto si no tengo ningún método para verificar si el carácter es aceptable por la codificación especificada. Algo así como
Char.IsEncodable('ғ', Encoding.GetEncoding('Windows-1251'))
Mi solución actual es convertir todos los caracteres mayor que 127 (c> 127) a & #dddd; cadenas de escape, pero mi jefe no está satisfecho con la solución, porque la fuente del archivo HTML generado no es legible.
Espero que eventualmente pueda deshacerse de la necesidad de CP-1251 en cualquier sistema con el que esté trabajando. ¡Las codificaciones que no sean Unicode deberían considerarse un truco temporal en el mejor de los casos! –
¿Podría publicar sus primeras líneas en el archivo de la hoja de estilo? Me parece que vale la pena evaluar el elemento xsl: output en este punto. – Osiris76
¿Intentó especificar el atributo de codificación en el elemento? Normalmente trabajo con UTF-8 en estas ocasiones, pero podrías intentar insertar 'Windows-1251' en su lugar. –
Osiris76