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