我一直在使用源xml中的度数字符实体°
,并且在翻译后它总是以°
输出并且工作正常。然而,我最近不得不从xalan处理器切换到saxon,现在该字符在html中作为实际度字符(°)输出,并且浏览器将其呈现为∞。
我不确定为什么它在xalan中工作但是我在搜索并认为字符映射将是我在此页面中找到的解决方案:
http://www.xmlplease.com/xmltraining/xslt-by-example/examples/character-map_1.html
但是当我做同样的事情时,它似乎被忽略了,我仍然看到了∞。
同样,我正在使用saxon9和ants中的xslt任务与java6。我想在翻译为html时保留xml中的°
字符(或更改为°
)。有什么建议吗?
答案 0 :(得分:3)
看起来新输出没有标记为UTF-8?
大多数情况下,当一个角色变为两个角色时,这是因为您向浏览器发送了UTF-8,说它是另一种编码(即ISO-8859-1,win-1512等)。将UTF-8编码放在HTML标头中可能还不够。您可能还需要将其作为HTTP回复中的标题。
如果XSLT解析器转换所有实体,则使用°应该没有帮助。
否则,您可以设置一个标志以避免实体的转换?
答案 1 :(得分:2)
您无法强制保留输入实体,但可以使用output encoding =“us-ascii”确保将任何非ASCII字符作为实体或字符引用输出。
您的浏览器未正确显示度数标记这一事实意味着该文档的编码错误。使用us-ascii是一种解决方法,但它并没有解决潜在的问题,即你的配置在某处出现了问题(很难找到哪里)。
我不知道为什么忽略你的角色地图。假设您已正确编码,最可能的原因是XSLT处理器没有完成序列化,而是由其他东西完成:例如,您可能正在转换为DOM,然后将DOM序列化。
您可以使用撒克逊语来更好地控制Saxon如何使用HTML输出方法序列化特殊字符:字符表示 - 请参阅http://saxonica.com/documentation/extensions/output-extras/character-representation.xml