Unicode标准中有你需要4个字节来存储他们所有足够的代码点。 这就是UTF-32编码做什么。 然而,UTF-8编码以某种方式通过使用一种叫“变长编码”挤压到这些更小的空间。
事实上,它管理的表示只是一个字节,其长相酷似真正的ASCII US-ASCII的第127个字符,这样你就可以解释很多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,ISO 10646的转换格式是这里的最终决定权,并拥有所有的解释。
在的每个字节短,几个比特UTF-8编码的1至4字节的序列代表单个字符被用来表示它是否是一个尾随字节,一个前导字节,如果是,有多少字节跟随。 剩余位包含有效载荷。
UTF-8使用8个字节存储您的Unicode代码点,那些神奇的U +数字串,在内存中的其他系统。 在UTF-8,从0-127每个代码点存储在一个字节。 只有代码点128和上述使用2个,3个,实际上,最多6个字节被存储。
摘自绝对最低每一个软件开发人员绝对,积极必须知道的关于Unicode和字符集(没有借口!)