为什么 UTF-8 编码不使用 11111xxx 形式的字节作为第一个字节?
Why UTF-8 encoding does not use bytes of the form 11111xxx as the first byte?
根据https://en.wikipedia.org/wiki/UTF-8,字符编码的第一个字节永远不会以既不是 10xxxxxx 也不是 11111xxx 的位模式开头。
第一个的原因很明显:自动同步。但是第二个呢?是为了启用 5 字节编码的潜在扩展吗?
旧版本的 UTF-8 最多允许 6 字节编码。它后来被限制为 4 字节编码,但没有理由为了实现该限制而使格式不一致。前导 1 的个数表示序列的长度,所以 11111xxx 仍然意味着 "at least 5 bytes," 只是没有这样的合法序列。
拥有非法代码点对于检测损坏非常有用(或者更常见的是,尝试解码实际上不是 UTF-8 的数据)。因此,使格式不一致只是为了取回一点存储空间(实际上不能用于任何事情),会损害其他目标。
根据https://en.wikipedia.org/wiki/UTF-8,字符编码的第一个字节永远不会以既不是 10xxxxxx 也不是 11111xxx 的位模式开头。 第一个的原因很明显:自动同步。但是第二个呢?是为了启用 5 字节编码的潜在扩展吗?
旧版本的 UTF-8 最多允许 6 字节编码。它后来被限制为 4 字节编码,但没有理由为了实现该限制而使格式不一致。前导 1 的个数表示序列的长度,所以 11111xxx 仍然意味着 "at least 5 bytes," 只是没有这样的合法序列。
拥有非法代码点对于检测损坏非常有用(或者更常见的是,尝试解码实际上不是 UTF-8 的数据)。因此,使格式不一致只是为了取回一点存储空间(实际上不能用于任何事情),会损害其他目标。