XML Spec和UTF-16

时间:2013-12-19 21:55:25

标签: xml unicode w3c utf-16 specifications

<{3}}的Section 4.3.3Appendix F代表XML 1.0 spec,UTF-16编码数据流中的UTF-16和XML编码声明。根据这些部分中的信息,UTF-16文档中似乎需要字节顺序标记。但附录F中的摘要图表给出了UTF-16输入没有字节顺序标记的情况,但此方案具有xml声明。根据4.3.3节,UTF-16编码的文档不需要编码声明(在这种情况下,XML声明本身是可选的)。

鉴于此信息,是一个UTF-16 xml文档,既没有BOM也没有XML声明,如果文档的其余部分是?

,还缺少外部提供的编码信息,这些信息被认为格式正确。

1 个答案:

答案 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的要求。