我正在使用 xsl 来控制我的 xml 文件的输出,但是正在添加 BOM 字符。
6 回答
# vim file.xml
:set nobomb
:wq
只需将其添加到您的 xslt 文件中:
<xsl:output method="text"
encoding="ASCII"/>
只需使用任何十六进制编辑器剥离前两个字节。
使用 XSLT 从字符串中删除 BOM 符号非常简单:
<xsl:value-of select="translate(StringWithBOM,'','')"/>
您的 XSL 设置使用什么输出编码?输入文档是什么编码?输入来自哪里,同时在哪里保存/上传/下载?
如果没有指定其他内容,XML 和 XSL 应该默认使用 UTF-8。但很明显,这里出了点问题。
可能发生的一件事是,XML 正在由 Web 服务器提供服务,该服务器默认设置为在 ISO-8859-1 中提供服务,这是一个非常好的默认设置...... pre-Unicode。
有点离题,但Joel关于文本编码的非常有启发性的文章让我大开眼界。有很多人在编程方面非常聪明,但他们坚持认为存在诸如“纯文本”之类的东西,或者称他们的文本为“ASCII”或“ANSI”。如果您还没有解决这个问题,那么您确实需要解决这个问题。
我的印象是鼓励以 Unicode 和某些 Unicode 编码来编写 XML,并且某些 Unicode 编码被指定为包含初始字节顺序标记。如果没有该字节顺序标记,您的文件将不再以 Unicode 编码正确编码,因此不再正确的 XML。鼓励 XML 处理器不宽容,在最轻微的错误(例如不正确的 Unicode 编码)上立即失败。您希望破解哪些类型的 XML 处理器?
显然,从 UTF-8 编码的文档中去除字节顺序标记会使该文档看起来是 ASCII 编码的(不是 Unicode),并且一些文本处理器只能使用 ASCII 编码的文档。这是你的工作吗?