我遇到类似于此处讨论的编码问题: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字符时,我仍然会有致命的错误。 实际上,我并不真正关心这些角色,而且我的转变可能会让所有这些角色掉线。我只是希望转换继续下去,因为它们不会崩溃。
我想念什么?为什么还有这个致命错误(致命错误!输出字符在此编码中不可用)?
提前感谢您的帮助。
答案 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
问问自己为什么需要在编码之间进行转换