XSL转换中的编码问题

时间:2013-03-01 14:48:59

标签: xslt encoding

我遇到类似于此处讨论的编码问题: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字符时,我仍然会有致命的错误。 实际上,我并不真正关心这些角色,而且我的转变可能会让所有这些角色掉线。我只是希望转换继续下去,因为它们不会崩溃。

我想念什么?为什么还有这个致命错误(致命错误!输出字符在此编码中不可用)?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

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