2013-12-19 32 views
6

Section 4.3.3Appendix FXML 1.0 spec讲述了关于UTF-16,byte order mark (BOM)以UTF-16编码的数据流和XML编码声明。从这些部分的信息看来,UTF-16文档中似乎需要一个字节顺序标记。但是附录F中的摘要图给出了一个UTF-16输入没有字节顺序标记的场景,但是这个场景有一个xml声明。根据第4.3.3节,UTF-16编码文档不需要编码声明(在这种情况下XML声明本身是可选的)。XML规范和UTF-16

给定该信息,是具有既不是BOM也不是还缺少外部提供了编码合式考虑的信息,如果文档的其余部分是一个XML声明一个UTF-16 xml文档?

+0

第4.3.3节似乎是说不是,但附录F图用来使这个不清楚。 –

+0

Unicode从未规定BOM的*要求*。这是对客户可能做的最糟糕的事情,但是创建只能由您自己的应用程序正确读取的文件的权利是给定的。它确保您的客户取决于您,有利于业务。 –

回答

7

从Unicode的6.2规范(第99页):

的UTF-16编码方案可以或可以不以BOM开始。但是,如果没有BOM,并且没有更高级别的协议,则UTF-16编码方案的字节顺序为big-endian。

因此,在UTF-16文档中不需要BOM。但是可能有一个“更高级别的协议”,如XML规范,以指示在没有BOM的情况下,对于UTF-16 XML文档需要做什么。

4.3.3节中的XML 1.0规范说:在UTF-16必须编码

实体和以UTF-8编码的实体可以与由附件H [ISO /描述的字节顺序标记开始IEC 10646:2000],[Unicode](零宽度无间隔字符,#xFEFF)的第16.8节。

让我们回到上面的更新版本。附录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一个UTF-16的XML文档和没有编码声明(这是XML声明的一部分)不是简洁(wellformed)文件(因为一个致命错误违反简洁(wellformed)的烦躁,看到的定义在没有外部信息的情况下,第1.2节中的格式良好限制)。这也符合4.3.3节之前关于UTF-16的BOM需求。