我需要帮助理解" 0-127中的每个代码点是如何存储在一个字节中的#34;引自下文。
以下是上下文:
因而发明了UTF-8的精彩概念。 UTF-8是另一个 系统用于存储你的Unicode代码点串,那些神奇的U + 数字,在内存中使用8位字节。在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?我可以看到为什么你需要2个字节用于256个代码点以上的字符,但为什么你需要2个字节代码点128-256?
答案 0 :(得分:3)
作为类比,假设您想要将长文本写入多个页面,并且您需要准确知道文本何时结束。然后你可能会保留右下角的一小部分,上面写着“文字在下一页继续”或“文字在这里结束”。例如:
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经过精心设计,非常棒。尝试找一些有关它的背景信息,以了解它的美丽。