为什么 inputenc 在定义八位字节解析时会跳过字符?

为什么 inputenc 在定义八位字节解析时会跳过字符?

Unicode 字符的 UTF-8 表示可能需要最多四个八位字节来定义。

如果一个八位字节从“00”到“7F”,则它是一个单个字符。如果它从“C0”到“DF”,则它是一个双八位字节字符的第一个八位字节,其中“E0”到“EF 和“F0”到“F7”分别表示三八位字节字符和四八位字节字符的第一个八位字节。如果它从“80”到“BF”,则它是一个由上述三种“第一个八位字节”之一开始的字符的延续。(来源:https://stackoverflow.com/questions/5290182/how-many-bytes-does-one-unicode-character-takehttps://www.wikiwand.com/en/UTF-8

然而,在“通过 inputenc 提供一些 UTF-8 支持”(https://texdoc.org/serve/utf8ienc.pdf/0),而是提到两个、三个、四个八位字节和连续字符的第一个八位字节的范围分别是“C2 到”DF、“E0 到”EF、“F0 到”F3 和“80 到”B9。

造成差异的原因是什么?即“C0”、“C1”、“F4 至 F7”和“BA 至 BF”在哪里?

答案1

您无法创建以 C0 或 C1 开头的 UTF8 代码。需要两个字节的最低 Unicode 是 80,即1000 0000二进制。(它是 € 字符,但现在这并不重要)。您只有 6 位将其保存到第二个字节,因为第二个字节必须以 为前缀10。因此,我们将二进制数除以 2+6:。10 000000第一部分必须保存到以 为前缀的第一个字节110,即110 00010,第二部分保存到以 为前缀的第二个字节10,即10 000000。生成的 UTF8 代码是11000010 10000000,即 C2 80。

相关内容