为什么UTF-8编码不使用11111 xxx形式的字节作为第一个字节?

为什么UTF-8编码不使用11111 xxx形式的字节作为第一个字节?,utf-8,utf,Utf 8,Utf,根据,字符编码的第一个字节从不以10xxxxxx或11111xxx的位模式开始。 第一个原因很明显:自动同步。但是第二个呢?启用5字节编码是为了实现潜在的扩展吗?旧版本的UTF-8最多允许6字节编码。它后来被限制为4字节编码,但没有理由为了实现该限制而使格式不一致。前导1的数量表示序列的长度,因此11111xxx仍然表示“至少5个字节”,只是没有这样的合法序列 拥有非法代码点对于检测损坏非常有用(或者更常见的是,尝试解码实际上不是UTF-8的数据)。因此,仅仅为了获取一位存储空间(实际上不能用于

根据,字符编码的第一个字节从不以10xxxxxx或11111xxx的位模式开始。
第一个原因很明显:自动同步。但是第二个呢?启用5字节编码是为了实现潜在的扩展吗?

旧版本的UTF-8最多允许6字节编码。它后来被限制为4字节编码,但没有理由为了实现该限制而使格式不一致。前导1的数量表示序列的长度,因此11111xxx仍然表示“至少5个字节”,只是没有这样的合法序列


拥有非法代码点对于检测损坏非常有用(或者更常见的是,尝试解码实际上不是UTF-8的数据)。因此,仅仅为了获取一位存储空间(实际上不能用于任何用途),就让格式不一致,这会损害其他目标。

准确地说,Unicode的代码点范围被限制为U+10FFFF,以保证所有字符都可以编码。这样做的副作用是使字节0xF5-0xFD在UTF-8中未被使用。(0xFE和0xFF从来都不是有效的UTF-8前导字节,这保证了UTF-8字符永远不会与UTF-16的字节顺序标记混淆。)UTF-8中的其他非法字节是0xC0和0xC1,它们只会出现在ASCII字符的“过长”编码中。@dan04谢谢!您能详细说明ASCII字符的“超长”编码吗?有关“超长”编码的快速说明,请参阅。基本上,通过添加前导零,可以用比所需字节更多的字节对值进行编码,但这是明确禁止的。