【问题标题】:How do I remove the BOM character from my xml file [duplicate]如何从我的 xml 文件中删除 BOM 字符[重复]
【发布时间】:2010-09-22 16:01:55
【问题描述】:

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

【问题讨论】:

  • 与纯文本文件不同,XML 文件上的字节顺序标记永远不会导致任何问题,因为所有 XML 解析器都应该能够处理它,即使它是“UTF-8 BOM” ”。事实上,XML 标准本身甚至建议将其作为 w3.org/TR/2006/REC-xml-20060816/… 编码自动检测 的一部分。
  • 这不是建议,F 部分不规范。 Unicode 标准明确允许使用 UTF-8 BOM,但不推荐使用 - en.wikipedia.org/wiki/Byte_order_mark#cite_note-2 - UTF-8 BOM 不指示字节顺序。
  • 看起来不像是重复的,因为另一个问题提到了特定的工具。

标签: xml xslt unicode byte-order-mark


【解决方案1】:
# vim file.xml
:set nobomb
:wq

【讨论】:

    【解决方案2】:

    只需将其添加到您的 xslt 文件中:

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

    【讨论】:

      【解决方案3】:

      只需使用任何十六进制编辑器去除前两个字节。

      【讨论】:

      • 或 3,取决于 UTF 风格
      • 或 4,用于 UTF-32。但它很可能是 3,UTF-8 是最常见的 XML 编码。
      【解决方案4】:

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

      &lt;xsl:value-of select="translate(StringWithBOM,'','')"/&gt;

      【讨论】:

        【解决方案5】:

        我的印象是鼓励 XML 以 Unicode 和某些 Unicode 编码编写,并且某些 Unicode 编码被指定为包含初始字节顺序标记。如果没有该字节顺序标记,您的文件将不再以 Unicode 编码正确编码,因此不再正确的 XML。鼓励 XML 处理器不宽容,在最轻微的错误(例如不正确的 Unicode 编码)上立即失败。您希望破解哪些类型的 XML 处理器?

        显然,从 UTF-8 编码的文档中去除字节顺序标记会使该文档看起来是 ASCII 编码的(不是 Unicode),并且某些文本处理器只能使用 ASCII 编码的文档。这就是你正在使用的东西吗?

        【讨论】:

        • 对于没有指定编码且没有BOM的XML文件,UTF-8是默认编码。
        【解决方案6】:

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

        如果未指定其他内容,

        XML 和 XSL 应该默认使用 UTF-8。但很明显,这里出了点问题。

        可能发生的一件事是,XML 正在由默认设置为在 ISO-8859-1 中提供服务的 Web 服务器提供服务,这是一个相当不错的默认设置...... pre-Unicode。

        有点离题,但Joel's very instructive article 关于文本编码的内容让我大开眼界。有很多人在编程方面非常聪明,但他们坚持认为存在“纯文本”之类的东西,或者称他们的文本为“ASCII”或“ANSI”。如果您还没有解决这个问题,那么您确实需要解决这个问题。

        【讨论】:

          猜你喜欢
          • 2012-04-01
          • 2013-09-25
          • 2016-01-04
          • 2014-12-03
          • 1970-01-01
          • 2014-03-20
          • 2017-12-27
          • 1970-01-01
          相关资源
          最近更新 更多