Unicode到Windows-1251使用XML(HTML)转换 - 转换

mei*_*eir 8 html c# xml xslt encoding

我有XML文件,需要通过应用XSL Transformation来生成带有Windows-1251编码的HTML文件.问题是XSL -file的Unicode字符不会像"ғ"那样转换为HTML Unicode转义序列.在XSL Transformation期间,只有"?" 标志是写而不是他们.如何让XslCompiledTransform.Transform方法执行此转换?或者是有任何写HTML字符串到Windows-1251的HTML文件,将HTML Unicode转义序列,这样我就可以执行XSL转换为字符串,然后用这种方法来写与Windows-1251编码,并与HTML文件的方法- 所有unicode字符的转义(比如Convert(" ғ ")将返回" ғ ")?

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
}
Run Code Online (Sandbox Code Playgroud)

谢谢大家的帮助!

UPDATE

我在XSL文件中的输出配置标记:

<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
Run Code Online (Sandbox Code Playgroud)

我现在甚至都不希望XSL满足我的需求.但我想知道我没有任何方法来检查字符是否可以被指定的编码接受.就像是

Char.IsEncodable('?', Encoding.GetEncoding('Windows-1251'))
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案是将所有大于127(c> 127)的字符转换为&#dddd; 转义字符串,但我的主管对解决方案不满意,因为生成的HTML文件的来源不可读.

col*_*sar 0

尝试使用替换规则来补充您的 xsl 文件

<xsl:value-of select="replace(.,'&#1171;','&amp;#1171;')"/>
Run Code Online (Sandbox Code Playgroud)

您可能希望使用正则表达式模式来执行此操作:

<xsl:value-of select="replace(.,'&#(\d+);','&amp;#$1;')"/>
Run Code Online (Sandbox Code Playgroud)

您的问题源于 xml 解析器,该解析器在转换发生之前用相应的 unicode 字符替换数字实体引用。因此,未知字符(或“?”)最终会出现在转换后的文档中。

希望这可以帮助,

此致,

卡斯滕