52

U+FFFE 必须是非字符才能使字节顺序标记起作用。

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

但我无法弄清楚,Unicode 标准也没有真正解释,为什么非字符集在“阿拉伯语表示形式-A”中包含一些随机块。这些是干什么用的?(除了蛇怪的眼睛?)

4

3 回答 3

50

好的,问题是“它们是做什么用的”和“为什么它们在阿拉伯语演示文稿的中间”。

因此,同意将这些永远不会使用的代码点指定为非字符,以便应用程序/程序员在内部使用它们。

于 2011-03-07T12:05:16.923 回答
18

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

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

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

所以总数

 17*2 + 32 = 66

阅读 unicode 第 16 章中的以下文本,其中说由于“历史原因”,它位于某个随机位置,我很好奇,但我认为没有任何歧义。

由于历史原因,范围 U+FDD0..U+FDEF 包含在阿拉伯语表示形式-A 块中,但这些非字符不是“阿拉伯语非字符”或“从右到左的非字符”,并且在任何其他非字符的其他方式,除了它们的代码点值

U+FEFF是 BOM 并且U+FFFE是它的字节交换版本。但是由于U+FFFE是非字符,当解释进程发现 U+FFFE 作为第一个字符时,它表示进程遇到了不正确字节顺序的文本或文件不是有效的 Unicode 文本,它只是给出一个信号,不是标准方式。它可以是一个,反向字节或错误的文本。

在 Unicode部分 3.2条款C2

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

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

因此,作为应用程序开发人员,您可以随意使用这些字符。它们用作标记或定界符,或者可能是一些 baslik 字符,但它们不应互换。

第 16.7 节

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

同样,U+FFFF 没有被 Unicode 标准保留为哨兵,而只是给出了典型的用例。阅读第 16.7 节

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

于 2011-03-05T05:57:49.770 回答
12

正如在 xkcd中提到的,U+FDD0实际上是蛇怪眼睛的 Unicode 字符。然而,出于(明显的)人身安全原因,角色不会呈现到屏幕上...... :)

于 2012-12-05T18:24:30.413 回答