Unicode的标准具有足够的代码点,你需要的4个字节来储存他们所有。那是什么UTF-32编码。但UTF-8编码以某种方式缩小这些成小得多的空间,通过使用一种叫"变宽度编码".

事实上,它管理,以表示第127字的US-ASCII在只有一个字,看起来就像真正的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、转换格式的ISO10646 是的最终决定权在这里并拥有所有的解释。

在短期,几位中的每一个字节的UTF-8编1至4字节的序列代表一个字都是用来表明它是否是一个尾字节领先字节,如果是,有多少字节遵循。剩下的位包含的有效载荷。

  

UTF-8是另一个系统用于存储   您的Unicode码点串,   那些神奇的U +数字,在内存   使用8位的字节。在UTF-8,每   从0-127码点被存储在   单字节。只有码点128和   以上是使用2,3存储,其实   多达6个字节。

通过绝对最低每一个软件开发人员绝对,积极必须知道的关于Unicode和字符集(没有任何借口!)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top