gpt4 book ai didi

XML 规范和 UTF-16

转载 作者:数据小太阳 更新时间:2023-10-29 01:47:29 35 4
gpt4 key购买 nike

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

根据此信息,如果文档的其余部分是格式正确的,那么一个既没有 BOM 也没有 XML 声明且缺少外部提供的编码信息的 UTF-16 xml 文档是否被认为格式正确?

最佳答案

来自 Unicode 6.2 规范(第 99 页):

The UTF-16 encoding scheme may or may not begin with a BOM. However, when there is no BOM, and in the absence of a higher-level protocol, the byte order of the UTF-16 encoding scheme is big-endian.

因此 UTF-16 文档中不需要 BOM。但是可能会有一个“更高级别的协议(protocol)”,例如 XML 规范来指示对于没有 BOM 的 UTF-16 XML 文档需要做什么。

XML 1.0 规范中的第 4.3.3 节说:

Entities encoded in UTF-16 MUST and entities encoded in UTF-8 MAY begin with the Byte Order Mark described by Annex H of [ISO/IEC 10646:2000], section 16.8 of [Unicode] (the ZERO WIDTH NO-BREAK SPACE character, #xFEFF).

让我们稍后回到上面。附录 F 描述了在 BOM 不存在的情况下检测字符编码的方法。但是我认为该部分与您的问题无关,因为您在询问没有 BOM 和没有 XML 声明的 UTF-16 XML 文档是否“格式正确”并且附录 F 是规范的非规范部分。

因此,回到规范,如果“作为一个整体,它与生产标签文档相匹配”,则该文档是良构的。 (第 2.1 节)。查看 document 表明 XML 声明是可选的(这也在第 2.8 节中提到)。所以有可能没有 XML 声明的格式良好的文档;这回答了你一半的问题。

另一半是没有 XML 声明但也没有 BOM 的 UTF-16 XML 文档是否仍然是格式良好的。在第 4.3.3 节中它说(强调我的):

In the absence of information provided by an external transport protocol (e.g. HTTP or MIME), it is a fatal error for an entity including an encoding declaration to be presented to the XML processor in an encoding other than that named in the declaration, or for an entity which begins with neither a Byte Order Mark nor an encoding declaration to use an encoding other than UTF-8.

基于此,没有 BOM 和编码声明(它是 XML 声明的一部分)的 UTF-16 XML 文档不是格式正确的文档(因为 fatal error 违反了格式正确性,请参阅格式正确性的定义1.2 节中的约束)在没有外部信息的情况下。这也符合前面 4.3.3 节中关于 UTF-16 的 BOM 要求的内容。

关于XML 规范和 UTF-16,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20692447/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com