这个问题的意思是“它们是用来做什么的”和“为什么它们在阿拉伯表现形式的中间”。
因此,同意将这些代码点指定为非字符,以便它们可以被应用程序/程序员内部使用,否则它们将永远不会被使用。
这些非字符是供应用程序内部使用的,不应互相交换。
我试图根据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相关联。此属性使这两个非字符代码点在内部用途作为哨兵时非常有用。例如,它们可能用于指示列表的结尾,表示在索引中保证高于任何有效字符值的值等等。
如xkcd中所述,U+FDD0
实际上是一只神话生物巴西利斯克的眼睛Unicode字符。然而出于个人安全的(显而易见)原因,该字符不会在屏幕上呈现... :)