4

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

在维基百科中,第一个字节称为前导字节,第二个字节称为尾随字节。0xC3 它是一个元数据字节,这意味着它用 1 个字节 0xA9 编码的字符,但它的 unicode 值é0xE9

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

4

1 回答 1

12

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

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

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

关于 UTF-8 的 Wikipedia 文章对这个过程有很好的描述

有一种直接使用代码点值的编码:UTF-32(又名 UCS-4),基本上是“将代码点值用作 32 位值”

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

于 2012-05-04T11:11:13.413 回答