鉴于此信息,是一个UTF-16 xml文档,既没有BOM也没有XML声明,如果文档的其余部分是?
,还缺少外部提供的编码信息,这些信息被认为格式正确。答案 0 :(得分:7)
从Unicode 6.2规范(第99页):
UTF-16编码方案可能也可能不以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节(ZERO WIDTH NO- BREAK SPACE字符,#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文档不是一个格式良好的文档(因为致命错误违反了良好的形式,请参阅良好形式的定义在没有外部信息的情况下,第1.2节中的约束。这也符合前面第4.3.3节中关于UTF-16 BOM的要求。