第 4.3.3 节 http://www.w3.org/TR/REC-xml/#charencoding and 附录F http://www.w3.org/TR/REC-xml/#sec-guessing of the XML 1.0 规范 http://www.w3.org/TR/REC-xml/谈论UTF-16 https://en.wikipedia.org/wiki/UTF-16, the 字节顺序标记 (BOM) https://en.wikipedia.org/wiki/Byte_order_markUTF-16 编码的数据流和 XML 编码声明。从这些部分的信息来看,UTF-16 文档中似乎需要字节顺序标记。但附录 F 中的汇总图表给出了一个场景,其中 UTF-16 输入没有字节顺序标记,但此场景有 xml 声明。根据第 4.3.3 节,UTF-16 编码的文档不需要编码声明(在这种情况下,XML 声明本身是可选的)。
鉴于此信息,如果文档的其余部分是格式良好的,那么既没有 BOM 也没有 XML 声明且也缺乏外部提供的编码信息的 UTF-16 xml 文档是否被视为格式良好?
来自 Unicode 6.2 规范(第 99 页):
UTF-16 编码方案可能以 BOM 开头,也可能不以 BOM 开头。然而,当没有BOM,并且没有更高层协议的情况下,UTF-16编码方案的字节顺序是big-endian。
因此 UTF-16 文档中不需要 BOM。但可能有一个“更高级别的协议”,例如 XML 规范,来指示对于没有 BOM 的 UTF-16 XML 文档需要做什么。
XML 1.0 规范中的 4.3.3 节说:
以 UTF-16 编码的实体必须和以 UTF-8 编码的实体可以以 [ISO/IEC 10646:2000] 附录 H、[Unicode] 第 16.8 节(零宽度无中断空格字符)描述的字节顺序标记开头,#xFEFF)。
我们稍后再回到上面。附录 F 描述了在 BOM 不存在的情况下检测字符编码的方法。但我认为该部分与您的问题无关,因为您询问没有 BOM 且没有 XML 声明的 UTF-16 XML 文档是否“格式良好”,并且附录 F 是规范的非规范部分。
因此,回到规范,如果“作为一个整体,它与生产标记文档相匹配”,则该文档是格式良好的。 (第 2.1 节)。审阅document
表明 XML 声明是可选的(这也在 2.8 节中提到)。因此,无需 XML 声明即可拥有格式良好的文档;这回答了你一半的问题。
另一半是没有 XML 声明但也没有 BOM 的 UTF-16 XML 文档是否仍然是格式良好的。第 4.3.3 节中写道(强调我的):
在缺乏外部传输协议(例如 HTTP 或 MIME)提供的信息的情况下,对于包含编码声明的实体来说,以声明中指定的编码以外的编码呈现给 XML 处理器是一个致命错误,或者对于既不以字节顺序标记也不以编码声明开头的实体使用 UTF-8 以外的编码.
基于此,没有 BOM 且没有编码声明(这是 XML 声明的一部分)的 UTF-16 XML 文档不是格式良好的文档(因为致命错误违反了格式良好性,请参阅第 5 节中格式良好性约束的定义1.2)在没有外部信息的情况下。这也符合前面第 4.3.3 节中所说的有关 UTF-16 的 BOM 要求的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)