unicode标准中有足够的代码点,您需要4个字节来存储它们。这就是UTF-32编码的作用。然而,UTF-8编码通过使用一种称为“可变宽度编码”的方式将它们压缩到更小的空间中。
实际上,它设法在一个字节中代表了US-ASCII的前127个字符,这看起来与真实的ASCII完全一样,因此您可以将很多ascii文本解释为UTF-8,而无需对其进行任何处理。整洁的把戏。那么它是如何工作的?
我将在这里问和回答我自己的问题,因为我做了一些阅读来弄清楚这个问题,我认为这可以节省一些时间。另外,如果我弄错了某些人,也许有人可以纠正我。
每个字节以几位开头,告诉您它是单字节代码点,多字节代码点还是多字节代码点的延续。像这样:
0xxx xxxx A single-byte US-ASCII code (from the first 127 characters)
多字节代码点每个都以几个比特开头,这些比特本质上说:“嘿,您还需要阅读下一个字节(或两个或三个)来弄清楚我是什么。”它们是:
110x xxxx One more byte follows
1110 xxxx Two more bytes follow
1111 0xxx Three more bytes follow
最后,这些起始代码后面的字节都看起来像这样:
10xx xxxx A continuation of one of the multi-byte characters
因为您可以从头几位看出正在查看的字节类型,所以即使在某个地方出现错误,也不会丢失整个序列。
[RFC3629 - UTF-8, a transformation format of ISO 10646是这里的最终授权,并包含所有解释。
简而言之,UTF-8编码的1至4字节序列的每个字节中的几个位代表一个字符,用于指示它是尾随字节,前导字节,如果是,则指示多少字节跟随。其余位包含有效载荷。
[UTF-8是另一个用于存储的系统您的Unicode代码点字符串,内存中那些神奇的U +数字使用8位字节。在UTF-8中,每个0-127的代码点存储在单字节。仅代码点128和上面使用2、3存储,实际上,最多6个字节。