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

56

为了让字节顺序标记正常工作,U+FFFE需要成为一个非字符。

Unicode标准中,U+FFFF被描述为“作为哨兵在内部使用是有用的”。很有道理。

但我无法弄清楚,而且Unicode标准也没有真正解释,为什么非字符集包括“阿拉伯表现形式-A”中的一些随机块。这些是用来做什么的?(除了瞪眼睛?)


6
@Pacerier,请检查漫画的Alt文本(悬停/工具提示)。 - Ben
3个回答

54

这个问题的意思是“它们是用来做什么的”和“为什么它们在阿拉伯表现形式的中间”。

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


并没有真正解释为什么他们没有使用 FFF0 到 FFFF。 - Raedwald
4
@Raedwald,FFF9到FFFF已被用于其他用途。http://www.unicode.org/charts/PDF/UFFF0.pdf - Ben
1
啊,所以那些非字符是在FFF9到FFFF被分配之后添加的。 - Raedwald

19

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

我试图根据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 进程不得将非字符代码点解释为抽象字符。

  • 非字符代码点可用于内部使用,例如作为哨兵值或定界符,但不应公开交换。

因此,作为应用程序开发人员,您可以自由地使用这些字符。它们被用作哨兵或定界符,或者可能是一些特殊字符,但不应互换。

第16.7节 指出:

实际上,非字符可以被视为应用程序内部的私有使用代码点。与第16.5节“专用字符”讨论的专用字符不同,它们分配了字符并旨在用于公开交换,遵循按照私人协议的解释,非字符是永久保留(未分配)并且除了它们可能的应用程序内部私有用途之外没有任何解释。

再次提醒,U+FFFF并不是Unicode标准中保留的哨兵,只是给出了典型的用例。请参阅第16.7节中的说明。

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


1
不,我没有说U+FFFE是BOM。我说U+FFFE的非字符状态是必要的,以允许U+FEFF成为BOM。而你根本没有回答我的问题,只是复制/粘贴了我包含的同样的链接。 - dan04
好的,抱歉我在BOM那部分误解了你,我会进行编辑。但是文档说这只是一种意料之外的特性,并非标准规定。文档中说它可以用作“强信号”,而不是确定性的方法。同时,文档保留了其他方面供应用程序决定如何使用它。 - Zimbabao
我可以看到内部哨兵非字符的用途。但是Unicode 3.0已经有了34个。为什么需要在3.1中再添加32个呢? - dan04
1
好的。如果我理解你的问题正确,那么你想知道为什么要保留32个新字符的“历史原因”?在Unicode规范中找不到任何解释。我猜可能是因为他们感觉需要更多的非字符在BMP中,因为BMP只有两个非字符,而且它最常用的平面和两个已经被使用了。我可以想到一个例子,比如Java应用程序。 - Zimbabao

14

xkcd中所述,U+FDD0实际上是一只神话生物巴西利斯克的眼睛Unicode字符。然而出于个人安全的(显而易见)原因,该字符不会在屏幕上呈现... :)


8
错误!这是巨蝮眼睛的永久位置标记,由于(明显的)历史原因而被选择。 - Mac
啊,一个认知危害字符。 - Vikki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接