我正在使用IXMLDOMDocument::transformNode
从 MSXML 3.0 开始应用 XSLT 转换。每个转换都有一个 xsl:output
指令,指定 UTF-8
作为编码。例如,
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
...
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings"
xmlns:math="http://exslt.org/math"
extension-element-prefixes="str math">
<xsl:output encoding="UTF-8" indent="yes" method="xml" />
...
</xsl:stylesheet>
但转换后的结果始终是 UTF-16
(编码属性为 UTF-16
)。
<?xml version="1.0" encoding="UTF-16"?>
这是 MSXML 中的错误吗?
出于各种原因,我真的很想要 UTF-8
。有解决方法吗?或者我是否必须自己将转换后的结果转换为 UTF-8
并修补编码属性?
更新:我已经通过接受 UTF-16
编码并在前面添加字节顺序标记来解决该问题,这满足了转换结果的下游用户的需求,但我仍然对如何获取 UTF-8
输出感兴趣。
最佳答案
您可能将输出发送到 DOM 树或字符流,而不是字节流。如果是这种情况,那么就不是 MSXML 进行编码,并且最终编码所做的任何事情都不了解 xsl:output 指令(或者实际上是 XSLT)。
关于encoding - 使用 MSXML 的 XSLT 转换未使用正确的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5267876/