为什么字符é在UTF-8中编码为0xC3 0xA9?

时间:2012-05-04 11:06:41

标签: unicode encoding utf-8

如果我将字符é写入文件并使用十六进制编辑器打开它,我可以看到字节0xC3,0xA9。

来自维基百科,第一个字节称为前导字节,第二个字节称为尾随字节。 0xC3它是一个元数据字节,表示它用1字节0xA9编码的字符,但é的unicode值是0xE9

我基本上想知道为什么é用0xA9而不是0xE9编码。文本编辑器如何从0xC3A9转换为0xE9?任何轮班操作?

1 个答案:

答案 0 :(得分:12)

是什么让你认为0xC3是“元数据字节”?

UTF-8中的每个字节都包含有关编码的代码点的相关信息。

UTF-8编码的代码点的第一个字节包含一个标记(前导1的数量),表示用于编码代码点的总字节数(*) 实际代码点的前几位。然后,所有尾随字节都包含一个“连续标记”(位10)和另外6位编码的代码点。

关于UTF-8的维基百科文章有a pretty good description of the process

有一个直接使用代码点值的编码:UTF-32(a.k.a UCS-4)基本上“将代码点值用作32位值”

(*)标记实际上非常简单:如果字节以(即最高位为)0开头,则它是单字节编码(即代码点)在0到127之间)。如果它以10开头,则它是一个连续字节。如果它是110111011110,那么它分别是2字节,3字节或4字节序列的开头。 1111101111110也曾被定义,但在现代UTF-8中不再有效(因为只需要对那些保证永远不会在Unicode标准中使用的值进行编码)。