我需要帮助来理解下面引述的“ 0-127中的每个代码点都存储在一个字节中”。
这里是上下文:
因此发明了UTF-8的出色概念。UTF-8是另一个使用8位字节将Unicode代码点的字符串(那些神奇的U +数字)存储在内存中的系统。在UTF-8中,从0-127的每个代码点都存储在一个字节中。实际上,只有代码点128和更高的代码点使用2、3存储,最多6个字节。
来源:http : //www.joelonsoftware.com/articles/Unicode.html
我知道数字0-127是用来表示ASCII字符的数字。Unicode字符由U + HexHex(又称代码点)表示。0-127如何转换为代码点?如果每个十六进制数字可以表示16个选项,则一个8位字节可以容纳2个十六进制数字(2 ^ 8 = 16 * 16 = 256)。
问题:但是可以表示256个字符,那么为什么要停止在127个字符呢?我可以看到为什么256个代码点以上的字符需要2个字节,但是为什么128-256个代码点需要2个字节?
打个比方,假设您想在多个页面上写一个长文本,并且需要确切地知道文本何时结束。然后,您可能会在右下角保留一小部分用于说明“文本在下一页继续”或“文本在此处结束”的注释。例子:
page 1: This is a very [the text continues on the next page]
page 2: long text that [the text continues on the next page]
page 3: does not fit [the text continues on the next page]
page 4: on one page. [the text ends here]
很明显,页面的右下角不能用于普通文本,因为继续标记已经使用了它。
当将字节序列转换为代码点序列时,UTF-8使用了一种非常相似的技术。规则是:
这意味着每个字节的最高位用作标记,表明“此字节是多字节代码点序列的一部分”。由于此位具有此含义,不能具有任何其他含义,因此只能使用一个字节表示从0到127的代码点。所有其他代码点都需要一个以上的字节。
UTF-8不是唯一以字节顺序存储Unicode代码点的可能性。您还可以使用以下规则定义编码:
现在,对于0到253的代码点,您只需要一个字节,而对于所有其他代码点,则至少需要三个字节,这对于希腊语,西里尔字母,东亚语言和许多其他语言都是浪费的。
UTF-8经过精心设计,非常棒。尝试查找有关它的一些背景信息,以了解其所有优点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句