可以使用Unicode映射多少个字符?

Ufu*_*arı 74 unicode utf-8 utf

我要求解释Unicode中所有可能有效组合的计数.我知道char可以编码为1,2,3或4个字节.我也不明白为什么延续字节有限制,即使该字符的起始字节清除它应该有多长.

dan*_*n04 105

我要求解释Unicode中所有可能有效组合的计数.

1,111,998:17架飞机×每架飞机65,536个字符 - 2048个代理人 - 66个非人物

请注意,UTF-8和UTF-32理论上可以编码超过17个平面,但是该范围受到UTF-16编码限制的限制.

Unicode 6.0中实际分配了109,384个代码点.

我也不明白为什么延续字节有限制,即使该字符的起始字节清除它应该有多长.

UTF-8中此限制的目的是使编码自同步.

对于反例,请考虑中文GB18030编码.在那里,字母ß表示为字节序列81 30 89 38,其中包含数字0和的编码8.因此,如果你有一个字符串搜索功能不是为这个特定于编码的怪癖设计的,那么搜索数字8会在字母内找到误报ß.

在UTF-8中,这不可能发生,因为前导字节和跟踪字节之间的非重叠保证了较短字符的编码永远不会在较长字符的编码中发生.

  • 您链接的"自我同步"文章并没有解释什么是自我同步 (2认同)
  • 有趣的是,UTF8 只需要 4 个字节来映射所有 Unicode 字符,但如果需要,UTF8 可以支持多达 680 亿个字符,每个字符最多占用 7 个字节。 (2认同)

Sim*_*son 9

Unicode允许17个平面,每个平面有65,536个可能的字符(或"代码点").这总共有1,114,112个可能的字符.目前,只有约10%的空间已经分配.

这些代码点编码方式的确切细节因编码而异,但您的问题听起来像是在考虑使用UTF-8.之所以在延续字节的限制大概是这样就很容易找到下一个字符的开始(如延续字符总是形式10xxxxxx,但起始字节永远是这种形式).

  • @Andy:这是有道理的:UTF-8 的原始规范适用于更大的数字。21 位的限制对于那些将自己锁定在 16 位字符中的人来说是一种安慰,因此 UCS-2 产生了被称为 UTF-16 的可憎之物。 (3认同)
  • 我认为这已经过时了.它不再使用6个字节 (2认同)

Phi*_*ipp 5

Unicode支持1,114,112个代码点。有2048个代理代码点,给出1,112,064个标量值。其中有66个非字符,导致1,111,998个可能的编码字符(除非我犯了计算错误)。

  • 此数字来自使用UTF-16代理系统可寻址的飞机数量。您具有1024个低替代项和1024个高替代项,从而获得1024²非BMP代码点。这加上65,536个BMP代码点正好为1,114,112。 (2认同)
  • @Philipp,但您在回答中输入“ 1_112_114”,但在注释中解释了“ 1_114_112”。也许您混合了2和4。 (2认同)
  • 这个答案多年来一直存在计算错误,所以我冒昧地清理了它。是的,答案中的值 1112114 是一个拼写错误。正确的值为 1114112,即 0x110000 的十进制值。 (2认同)