在Unicode中,什么是"非字符"?

3

我不知道"非字符(noncharacter)"是什么,它们是禁止使用的Unicode字符,但我可以复制和粘贴它们,例如U+FFFF()。如果一个字符在Unicode中有一个固定的位置,并且可以用于显示某些内容,则:

  1. 这些字符为什么被称为"非字符"?
  2. 将它们分类为非字符有何意义,因为它们在表格上占有位置并且可以在HTML和CSS中显示(尽管作为替换字符)?
  3. 在Unicode中有这么多空白空间,比如在"特殊"块(FFF0-FFFF)中,这有何意义?

https://www.unicode.org/faq/private_use.html - dave_thompson_085
2
私人使用字符、非字符和哨兵常见问题解答(FAQ) - JosefZ
1个回答

2
特殊字符块并不是空的。该块中有几个元素被指定了。其中最著名(也最重要)的是替换字符(U+FFFD)在该块中。虽然它不是一个字符,也不在特殊字符块中,但非常重要的序列“FFFE”(小端字节顺序标记)可能出现在文件开头,因此U+FFFE不能成为合法字符。 (相关的U+FEFF技术上是一个字符,但其作为字符的使用已被弃用。)如果需要新的“特殊”字符,则仍有几个可用于它们的插槽,同时仍保持在该块内。
Unicode倾向于将类似的内容分组到方便大小的2的幂块中,因此在各种块的末尾会留下一些未分配的值。 Unicode空间总共有一百万个代码点。少于300k已被分配,因此有很多空间可以保持整洁。
官方的非字符(每个平面的xFFFE和xFFFF,加上FDDO-FDEF)留出了用于字节序列的“特殊用途”的空间,您知道这些字节序列永远不会成为字符。 BOM是其中最著名的用途,但如果需要,实现可以将它们用于其他目的。总共有66个非字符占据了一百万个代码点中的一些,因此在提供一些未来的灵活性方面成本不高。

1
FYI,_BOM_是 U+FEFF(零宽不换行空格),可以出现在文本的几乎任何位置(并且仅在文件开头声明字节顺序)... U+FFFE 没有任何意义... - JosefZ
这就是我所说的“在技术上是一个字符,但其作为字符的使用已被弃用。” 详情请参见“文件中间的U+FEFF应该怎么处理?” https://unicode.org/faq/utf_bom.html#bom6 虽然“无操作”是认为U+FFFE的合理方式,但它是有定义且可解码的。 它只是映射到“非字符”。 请参见https://util.unicode.org/UnicodeJsps/character.jsp?a=FFFE(特别是属性noncharacter_code_point)。 - Rob Napier
顺便说一句,在上面的评论中提供FAQ链接,非常感谢。对于这个问题来说,那是一个非常有帮助的页面。 - Rob Napier

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