U + FFFE必须是非字符才能使字节顺序标记起作用。
U + FFFF在The Unicode Standard中被描述为“对于作为哨兵的内部目的有用”。有道理。
但我无法弄清楚,而且Unicode标准并没有真正解释为什么非字符集包含“阿拉伯语演示文稿-A”中的一些随机块。这些对于是什么? (除了the eye of the basilisk?)
答案 0 :(得分:40)
好的问题是“他们是为了什么”和“为什么他们在阿拉伯语演示表格的中间”。
因此,我们同意这些从未被用过的代码点将被指定为非字符,因此它们可以由应用程序/程序员在内部使用。
答案 1 :(得分:14)
这些非字符供应用程序内部使用,不应互换。
我尝试根据Unicode标准中的说法进行解释。
Unicode有66个非字符。对于所有17个平面,它们各有两个,最后两个代码点以FFFE FFFF结尾。 32个其他无字符是连续块U + FDD0到U + FDEF。
总计数
17*2 + 32 = 66
阅读unicode第16章中的以下文字,该文章说由于“历史原因”它在某个随机位置,我很好奇,但我不认为有任何含糊之处。
由于历史原因,范围U + FDD0..U + FDEF包含在阿拉伯语Presentation Forms-A块中,但这些非字符不是 “阿拉伯语非字符”或“从右到左的非字符”,并且没有任何区别 与其他非字符的其他方式,除了代码点值
U+FEFF
是BOM,U+FFFE
是字节交换版本。但由于U+FFFE
是非字符,当解释过程发现U + FFFE作为第一个字符时,它表示进程遇到了错误字节顺序的文本或文件不是有效的Unicode文本,它只是给出一个信号,而不是标准的方式。它可以是一个,反向字节或错误的文本。
在Unicode section 3.2子句中, C2 表示
C2进程不得将非字符代码点解释为抽象字符。
- 非字符代码点可以在内部使用,例如用于标记值或分隔符,但不应公开交换。
因此,作为应用程序开发人员,您可以随意使用这些字符。它们用作哨兵或分隔符,或者可能是一些baslik字符,但它们不应互换。
实际上,非字符可以被认为是应用程序内部的私有代码点。 与第16.5节“私有使用字符”中讨论的私有字符不同 分配字符,用于开放式交换,受制于 私人协议解释,非人格永久保留(未分配) 并且在他们可能的应用程序之外没有任何解释 - 内部私人用途
同样,U + FFFF不是由Unicode标准保留为sentinel,而是仅仅给出了典型的用例。请阅读section 16.7
U + FFFF和U + 10FFFF。这两个非特征代码点具有存在的属性 与特定Unicode编码形式的最大代码单元值相关联。在 UTF-16,U + FFFF与最大的16位代码单元值FFFF 16 相关联 U + 10FFFF与最大的合法UTF-32 32位代码单元值相关联,10FFFF 16 此属性将这两个非字符代码点用作内部目的作为标记。对于 例如,它们可能用于指示列表的结尾,以表示索引中的值 保证高于任何有效的字符值,依此类推
答案 2 :(得分:9)
如上所述here at xkcd,U+FDD0
实际上是蛇怪眼中的Unicode字符。然而,对于(明显的)人身安全的原因,角色不会呈现在屏幕上......:)