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

4
如果我将字符é写入文件,并使用十六进制编辑器打开,我可以看到字节0xC3、0xA9。
根据维基百科,第一个字节被称为前导字节,第二个字节被称为尾随字节。0xC3是元数据字节,表示该字符使用1个字节编码,而Unicode值为 é 的是 0xE9
我想知道为什么 é 的编码是0xA9而不是0xE9。文本编辑器如何从0xC3A9转换为0xE9?有移位操作吗?
1个回答

12
你认为0xC3是“元数据字节”的原因是什么?
UTF-8中的每个字节都包含有关编码的代码点的相关信息。
UTF-8编码的代码点的第一个字节包含一个标记(前导1的数量),该标记指示用于编码代码点的总字节数,并且实际代码点的前几个位。然后,所有尾随字节都包含一个“连续标记”(位10)和编码代码点的另外6位。
维基百科上关于UTF-8的文章描述了这个过程
还有一种使用代码点值直接表示的编码方式:UTF-32(也称为UCS-4),基本上就是“将代码点值用作32位值”。

(*) 实际上,标记非常简单:如果字节以(即最高有效位为)0 开头,则它是单字节编码(即代码点介于 0 和 127 之间)。如果以 10 开头,则它是连续字节。如果以 110111011110 开头,则它是 2、3 或 4 字节序列的开头。1111101111110 也曾经被定义过,但在现代 UTF-8 中不再有效(因为它们只用于编码保证不会在 Unicode 标准中使用的值)。


https://dev59.com/a1HTa4cB1Zd3GeqPVeAv#4177813 解释了如何将UTF-8字节0xC3A9映射到字符é - Derek Mahar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接