非字符U + FDD0到U + FDEF的目的是什么?

为了使字节顺序标记正常工作,U + FFFE必须是非字符。

在Unicode标准中将U + FFFF描述为“用于内部目的作为哨兵”。 说得通。

但我不明白,Unicode标准没有真正解释,为什么非字符集包含“阿拉伯语表示forms-A”内的一些随机块。 这些是为了什么? (除了蛇怪的眼睛 ?)

那么问题是“他们是为了什么”和“他们为什么在阿拉伯语expressionforms中”。

因此,一致认为这些永远不会被使用的代码点将被指定为非字符,所以它们可以被应用程序/程序员内部使用。

这些非字符供应用程序内部使用,不应互换。

我试图根据Unicode标准中所说的来解释。

Unicode有66个非字符。 对于所有17架飞机,它们各有两个,最后两个以FFFE FFFF结尾的代码点。 其他32个无字符是连续的块U + FDD0到U + FDEF。

所以总数

17*2 + 32 = 66 

从unicode第16章中读取下面的文本,其中说由于“历史原因”它在一些随机的地方,我很好奇,但我不认为有任何含糊之处。

由于历史原因,U + FDD0..U + FDEF范围包含在阿拉伯语表示forms块中,但这些非字符不是“阿拉伯非字符”或“从右到左的非字符”,并且不区分除了代码点值之外,其他方式与其他非字符相同

U+FEFF是BOM,而U+FFFE是它的字节交换版本。 但是由于U+FFFE是一个非字符,当一个解释过程发现U + FFFE是第一个字符的时候,它表明这个过程遇到了错误字节顺序的文本或者这个文件不是有效的Unicode文本,给出一个信号,而不是一个标准的方式。 它可以是一个,反向字节或错误的文本。

在Unicode的3.2节中 C2条款说

C2过程不应将非字符码点解释为抽象字符。

  • 非字符代码点可以在内部使用,例如用于标记值或分隔符,但不应公开交换。

所以作为应用程序开发人员,您可以随意使用这些字符。 他们被用来作为哨兵或分界线或可能是一些巴基利亚字符,但不应该互换。

第16.7节说

实际上,非字符可以被认为是应用程序内部的专用代码点。 与第16.5节“私人使用字符”中讨论的私人使用字符不同,私人使用字符是指定的字符,旨在用于公开交换,但须经私人协议解释,非字符永久保留(未分配),并且在外部没有任何解释可能的应用程序内部私人用途

同样,U + FFFF不是作为Unicode标准的标记保留的,而只是给出了典型的用例。 请阅读第16.7节

U + FFFF和U + 10FFFF。 这两个非字符码点具有与特定Unicode编码forms的最大码单元值相关联的属性。 在UTF-16中,U + FFFF与最大的16位代码单元值相关联,FFFF 16 U + 10FFFF与最大的合法UTF-32 32位代码单元值相关联,10FFFF 16此属性呈现这两个非字符代码点作为哨兵内部用途有用。 例如,它们可能被用来指示列表的结尾,以表示索引中的值保证高于任何有效的字符值,等等

正如在这里提到的xkcd , U+FDD0实际上是一个U+FDD0眼睛的Unicode字符。 对于(明显的)人身安全的原因,但字符不呈现在屏幕上… 🙂