如何从我的XML文件中删除BOM字符

我正在使用xsl来控制我的xml文件的输出,但是正在添加BOM字符。

# vim file.xml :set nobomb :wq 

文件BOM检测器 (免费的Windows)可以很容易地删除字节顺序标记。

只需要在你的xslt文件中添加这个:

 <xsl:output method="text" encoding="ASCII"/> 

只需使用任何hex编辑器去掉前两个字节

使用XSLT从string中删除BOM符号非常简单:

<xsl:value-of select="translate(StringWithBOM,'','')"/>

我的印象是鼓励XML以Unicode编码,使用某种Unicode编码,并指定某些Unicode编码包含一个初始的字节顺序标记。 如果没有这个字节顺序标记,你的文件将不再被正确编码成Unicode编码,因此不再是正确的XML。 鼓励XML处理器不加宽容,立即失败(例如不正确的Unicode编码)。 你想要打破什么样的XML处理器?

很明显,从UTF-8编码的文档中剥离一个字节顺序标记使得该文档看起来是ASCII编码的(而不是Unicode),并且一些文本处理器只能使用ASCII编码的文档。 这是你正在与什么工作?

什么输出编码是您的XSL设置使用? input文档是什么编码? input来自哪里,同时在哪里保存/上传/下载?

如果没有其他指定,XML和XSL应该默认使用UTF-8。 但显然,这里出了问题。

可能发生的一件事情是,XML由一个默认设置为ISO-8859-1的web服务器提供服务,这是一个非常好的默认… pre-Unicode。

稍微偏离主题,但Joel关于文本编码的非常有启发性的文章让我大开眼界。 有很多人在编程方面非常聪明,但是坚持认为“纯文本”或者叫“ASCII”或“ANSI”这样的东西。 如果你还没有这个问题的话,你真的需要去解决这个问题。