gpt4 book ai didi

c# - 使用 XML(HTML) 转义的 Unicode 到 Windows-1251 的转换

转载 作者:太空狗 更新时间:2023-10-29 13:53:03 25 4
gpt4 key购买 nike

我有 XML 文件,需要通过应用 XSL 转换生成具有 Windows-1251 编码的 HTML 文件。一个问题是 XSL 文件的 Unicode 字符没有转换为 HTML Unicode 转义序列,如“ғ”在 XSL 转换期间,只有“?”标志是写而不是他们。我怎样才能要求 XslCompiledTransform.Transform 方法进行这种转换?或者是否有任何方法可以通过应用 HTML Unicode 转义序列将 HTML 字符串写入 Windows-1251 HTML 文件,以便我可以对字符串执行 XSL 转换,然后通过这种方法写入具有 Windows-1251 编码和 HTML 的文件- 转义所有 unicode 字符(类似于 Convert("zh") 将返回“ғ”)?

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
}

谢谢大家的帮助!

更新

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

<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />

现在我什至不希望 XSL 能满足我的需要。但我想知道我没有任何方法来检查指定编码是否可以接受字符。有点像

Char.IsEncodable('ғ', Encoding.GetEncoding('Windows-1251'))

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

最佳答案

请注意,XML 既是一种数据模型,也是一种序列化格式。数据可以使用与此数据的序列化不同的字符集。

看起来您的问题的关键原因是您的序列化过程试图限制数据模型的字符集,而您想要设置序列化格式的字符集。让我们举个例子:<band>Motörhead</band><band>Mot&#246;rhead</band>是相同的 XML 文档。它们具有相同的结构和完全相同的数据。因为 heavy metal umlaut , data 的字符集是 unicode(或比 ASCII 更大的字符集)但是,因为字符引用的使用 &#246; ,文档后一种序列化形式的字符集为ASCII。为了处理这些数据,您的 XML 工具在这两种情况下仍然需要识别 unicode,但在使用后一种序列化时,I/O 和文件传输工具不需要识别 unicode。

我的猜测是通过告诉 XMLTextWriter要使用 Windows-1251 编码,实际上它可能试图通过丢弃该字符集之外的所有字符并写入 ? 来将 data 的字符集限制为包含在 Windows-1251 中的字符。字符代替。

但是,由于您通过 XSL 转换生成 XML 文档,因此您可以直接在 XSLT 文档中控制序列化的字符集。这是通过向 xsl:output 元素添加编码属性来完成的。修改成这样

<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" encoding="windows-1251"/>

现在,XSLT 处理器负责序列化为精简字符集,并为 windows-1251 中包含的数据中的所有字符输出字符引用。

如果更改数据的字符集确实是您所需要的,那么您需要使用合适的字符转换库来处理您的数据,该库可以猜测最合适的替换字符(如 ö -> o )。

关于c# - 使用 XML(HTML) 转义的 Unicode 到 Windows-1251 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5947659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com