0

我有类似于这里讨论的编码问题:cross-encoding XSL transformations

这些问题没有给出明确的答案;这就是为什么我再次问它的原因。

我有一个以 UTF8 编码的 XML 输入文件。我有一个 XSL 转换应用于这些文件,它应该生成一个在 Windows-1252 中编码的 XML 输出。

我的 XSLT 文件中有以下两个声明:

<?xml version="1.0" encoding='Windows-1252'?>

<xsl:output method="text" indent="yes" encoding="Windows-1252"/>

我使用 Saxon 作为 XSL 处理器。除此之外,每次遇到没有 Windows-1252 等效项的 UTF8 字符时,我仍然会遇到致命错误。实际上,我并不真正关心这些角色,我的转变可能会放弃所有这些角色。我只希望转型继续进行,不要因为它们而崩溃。

我在哪里错过了什么?为什么仍然有这个致命错误(致命错误!输出字符在此编码中不可用)?

在此先感谢您的帮助。

4

2 回答 2

1

您描述的消息仅使用文本输出方法生成(使用 XML 或 HTML,序列化程序将使用数字字符实体)。规范要求此错误(请参阅http://www.w3.org/TR/xslt-xquery-serialization/#TEXT_ENCODING),但我可以理解为什么您可能需要更温和的回退,例如输出替代字符。

如果你不介意一点 Java 编码,可以很容易地替换你自己的 Saxon 的 TEXTEmitter 版本,它做事不同(你只需要重写一个方法);或者,您可以将 XSLT 输出发送到 Java Writer(编码将被忽略),并使用 Java I/O 框架将字符转换为所需的编码,无论您的应用程序需要什么处理无效字符。

于 2013-03-01T17:12:35.850 回答
0

UTF-8 是比 Windows-1252 更大的字符集

这意味着某些 UTF-8 字符无法转换为 windows-1252

问问自己为什么需要在编码之间进行转换

于 2013-03-01T14:53:28.460 回答