我要求解释Unicode中所有可能有效组合的计数。我知道char可以编码为1,2,3或4个字节。我也不明白为什么延续字节有限制,即使该字符的起始字节清除它应该有多长。
答案 0 :(得分:92)
我要求解释Unicode中所有可能有效组合的计数。
1,111,998 :每架飞机17架×65,536个字符 - 2048个代理 - 66个非字符
请注意,UTF-8和UTF-32理论上可以编码超过17个平面,但范围受限于limitations of the UTF-16 encoding。
109,384 代码点实际上已在Unicode 6.0中分配。
我也不明白为什么延续字节有限制,即使该字符的起始字节清除它应该有多长时间。
UTF-8中此限制的目的是进行编码self-synchronizing。
对于反例,请考虑中文GB18030编码。在那里,字母ß
表示为字节序列81 30 89 38
,其中包含数字0
和8
的编码。因此,如果您的字符串搜索功能不是针对此特定编码的怪癖设计的,那么搜索数字8
会在字母ß
中找到误报。
在UTF-8中,这不可能发生,因为前导字节和跟踪字节之间的非重叠保证了较短字符的编码永远不会在较长字符的编码中发生。
答案 1 :(得分:9)
Unicode允许17 planes,每个65,536个可能的字符(或'代码点')。这总共有1,114,112个可能的字符。目前,只有约10%的空间被分配。
这些代码点编码方式的确切细节因编码而异,但您的问题听起来像是在想UTF-8。限制连续字节的原因可能是因为很容易找到下一个字符的开头(因为连续字符总是10xxxxxx的形式,但起始字节永远不会是这种形式)。
答案 2 :(得分:4)
Unicode支持1,114,112个代码点。有2048个代理代码点,给出1,112,064个标量值。其中,有66个非字符,导致1,111,998个可能的编码字符(除非我计算错误)。
答案 3 :(得分:2)
提供一个比喻准确的答案,all of them
。
UTF-8编码中的连续字节允许在“线路噪声”面前重新同步编码的八位字节流。编码器只需要向前扫描一个没有0x80和0xBF之间值的字节,以便知道下一个字节是新字符点的开始。
理论上,今天使用的编码允许表达Unicode字符数最多为31位的字符。实际上,这种编码实际上是在像Twitter这样的服务上实现的,其中最大长度的推文可以编码多达4,340位的数据。 (140个字符[有效和无效],每个31位。)
答案 4 :(得分:1)
Unicode不是编码,是字符映射。根据维基百科,Unicode目前包含109242个不同的字符。
答案 5 :(得分:0)
Unicode的十六进制数量为110000,即1114112