为什么UTF-8会浪费这么多比特?

为什么UTF-8会浪费这么多比特?,utf-8,character-encoding,Utf 8,Character Encoding,如果您查看显示UTF-8字节布局的,它看起来相当浪费 6字节字符有17个硬编码位!如果我们只是将每个字节的第一位设置为1,以指示“下一个字节是同一个字符的一部分”,那么我们只需要6位: 1xxxxxxx 1xxxxxxx 1xxxxxxx 1xxxxxxx 1xxxxxxx 0xxxxxxx 而且它仍然向后兼容ASCII!我们也不会被限制在6字节 那么为什么UTF-8是浪费的呢?肯定有原因我没看到。此外,在第一个字节中似乎有足够的信息,我们甚至不需要剩余字节的10头。我们本可以做到的 0xxx

如果您查看显示UTF-8字节布局的,它看起来相当浪费

6字节字符有17个硬编码位!如果我们只是将每个字节的第一位设置为
1
,以指示“下一个字节是同一个字符的一部分”,那么我们只需要6位:

1xxxxxxx 1xxxxxxx 1xxxxxxx 1xxxxxxx 1xxxxxxx 0xxxxxxx
而且它仍然向后兼容ASCII!我们也不会被限制在6字节

那么为什么UTF-8是浪费的呢?肯定有原因我没看到。此外,在第一个字节中似乎有足够的信息,我们甚至不需要剩余字节的
10
头。我们本可以做到的

0xxxxxxx
10xxxxxx xxxxxxxx
110xxxxx xxxxxxxx xxxxxxxx
1110xxxx xxxxxxxx xxxxxxxx xxxxxxxx
11110xxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
11111xxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
那也行,不是吗?或者我们可以用不同的方案支持更多的字节


如果UTF-8没有得到正确的支持,它是否与这些单个字节的显示方式有关?
10
能提供什么?这样做值得吗?如果我试图在仅ASCII的程序中呈现UTF-8编码的日语字符,我会得到垃圾,不是吗?

这种冗余的原因是使UTF-8自同步:由一个码字的一部分或任何两个相邻码字的重叠部分形成的符号流不是有效码字。请参阅和

一些信息表明,这对程序员来说更合适。这与其说是一个具体问题,不如说是一个理论问题。@Carcigenicat我也这么认为,但后来我发现了另一个关于UTF-8限制在1字节的问题,所以。。shrugDerp…刚刚在节目表上发现了同样的问题:哈。那很有趣。我开始考虑如何改变我的方案,使其实现自同步,最后我得到了UTF-8。我想这就是原因。