Section 4.3.3和Appendix F of XML 1.0 spec谈到了UTF-16、UTF-16编码数据流中的byte order mark (BOM)和XML编码声明。从这些部分的信息来看,在UTF-16文档中似乎需要一个字节顺序标记。但是附录F中的摘要图表给出了一个场景,其中一个UTF-16输入没有字节顺序标记,但是这个场景有一个xml声明。根据第4.3.3节,UTF-16编码文档不需要编码声明(在这种情况下,XML声明本身是可选的)。
考虑到这些信息,如果文档的其余部分没有BOM或缺少外部提供的编码信息的xml声明,那么UTF-16 XML文档是否被认为格式良好?
发布于 2013-12-20 14:04:08
来自Unicode 6.2规范(第99页):
UTF-16编码方案可能以BOM开头,也可能不以BOM开头。但是,当没有BOM时,在没有高级协议的情况下,UTF-16编码方案的字节顺序是大端的。
因此,在UTF-16文件中不需要BOM .但是可能有一个“更高级的协议”,比如XML规范,来说明对于没有BOM的UTF-16 XML文档需要做些什么。
XML1.0规范中的4.3.3节说:
以UTF-16编码的实体和以UTF-8编码的实体可以从Unicode /IEC 10646:2000附件H所描述的字节级标记开始,这是第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和没有编码声明(这是XML声明的一部分)的UTF-16 XML文档不是格式良好的文档(因为致命的错误违反了格式良好,请参见1.2节中的良好格式约束的定义)。这也符合上文第4.3.3节中关于UTF-16的BOM要求的内容。
https://stackoverflow.com/questions/20692447
复制相似问题