gpt4 book ai didi

xslt - 为什么xslt输出encoding=utf-8不转换iso-8859-1字符?

转载 作者:行者123 更新时间:2023-12-01 16:16:07 25 4
gpt4 key购买 nike

为什么将输出编码设置为utf-8时,输出文件中的iso-8859-1字符没有转换为utf-8?

我有一个 iso-8859-1 编码的 xml 输入文件,并且声明了该编码。我想以utf-8输出。我的理解是,在 xslt 文件中设置输出编码应该管理字符转换。

我的理解有误吗?如果不是,为什么下面的简单测试用例会在 utf-8 声明的输出文件中输出 iso-8859-1 字符?

我的输入文件如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>
<data>ö</data>

我的变换如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output encoding="UTF-8" />
<xsl:template match="/">
<result>
<xsl:value-of select="." />
</result>
</xsl:template>
</xsl:stylesheet>

从命令行使用 saxon9he 我的结果如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<result>ö</result>

根据 BabelPad,我的结果文件中的 ö 是 0xF6,这是一个无效的 utf-8 字符。 ö 似乎没有受到转变的影响。

感谢您的帮助!

最佳答案

我可以看到两种可能的解释(认为可能还有其他解释)。

(a) 序列化的最后阶段,即将字符转换为字节,不是由 XSLT 处理器完成的,而是由无法访问样式表的其他软件完成的。例如,如果您在将输出发送到 Writer 而不是 OutputStream 的 Java 应用程序中运行转换,就会发生这种情况 - Writer 会使用平台默认编码(可能是 iso-8859-1)将字符转换为字节。

(b) 您在显示器中看到的八位字节不是存储在磁盘上的八位字节,而是它们的某种转换。当您将文件加载到编辑器中然后要求十六进制显示时,可能会发生这种情况;在某些情况下,您将获得编辑器内存中文档表示形式的十六进制显示,而不是存储在磁盘上的内容。

关于xslt - 为什么xslt输出encoding=utf-8不转换iso-8859-1字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14764376/

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