unicode标准中有足够的代码点,您需要4个字节来存储它们。这就是UTF-32编码的作用。然而,UTF-8编码通过使用一种称为“可变宽度编码”的方式将它们压缩到更小的空间中。
实际上,它设法在一个字节中代表了US-ASCII的前127个字符,这看起来与真实的ASCII完全一样,因此您可以将许多ascii文本解释为UTF-8,而无需对其进行任何处理。整洁的把戏。那么它是怎样工作的?
我将在这里问和回答我自己的问题,因为我只是做了一些阅读来弄清楚这个问题,我认为这可能会节省一些时间。另外,如果我有一些错误,也许有人可以纠正我。
8
直统一并不会需要32位编码所有的代码点。他们曾经声称拥有许多可能的代码点,但是在UTF-8起飞之后,他们有意将自己限制为21位,因此UTF-8永远不会超过每个字符4个字节。Unicode当前仅需要17位即可容纳所有可能的代码点。没有此限制,UTF-8每个字符可以达到6个字节。
—
沃伦·杨
@Warren:大部分都是准确的,但Unicode是21位代码(U + 0000至U + 10FFFF)。
—
乔纳森·勒夫勒
@沃伦:限制为4字节的UTF-8最多可以支持U + 1FFFFF。为了UTF-16,对U + 10FFFF进行了限制。
—
dan04 2011年
@ dan04关于UTF-16如何将其限制为U + 10FFFF,我们是否有任何简单的解释?很高兴了解更多有关此的信息。
—
A-letubby '16
@ A-letubby:因为分配了UTF-16“代理”代码,所以有1024个前导代理和1024个尾随代理(它们只能成对使用),因此要增加2 ^ 20(约一百万个)字符在BMP之外可用。添加到BMP中可用的2 ^ 16个字符后,这使0x110000个可能的字符成为可能。
—
dan04 '02