Unicode 在什么情况下UTF-8编码需要32位?

Unicode 在什么情况下UTF-8编码需要32位?,unicode,encoding,utf-8,Unicode,Encoding,Utf 8,根据我的理解和我在网上阅读的内容,UTF-8可以使用1-4个代码单元(每个长度为一个字节)对Unicode字符集中的所有字符进行编码。我想知道的是:既然Unicode中的所有代码点都可以用21位表示,那么什么时候会使用4个代码单元而不是3个 您只需要24位来表示任何Unicode字符,那么什么时候在UTF-8编码中使用32位,为什么?存储某种附加数据是否需要额外的位?UTF-8编码有开销。第一个字节使用1-5位表示使用了多少额外字节,每个额外字节使用2位作为延续字节标记。因此,四字节UTF-8序

根据我的理解和我在网上阅读的内容,UTF-8可以使用1-4个代码单元(每个长度为一个字节)对Unicode字符集中的所有字符进行编码。我想知道的是:既然Unicode中的所有代码点都可以用21位表示,那么什么时候会使用4个代码单元而不是3个


您只需要24位来表示任何Unicode字符,那么什么时候在UTF-8编码中使用32位,为什么?存储某种附加数据是否需要额外的位?

UTF-8编码有开销。第一个字节使用1-5位表示使用了多少额外字节,每个额外字节使用2位作为延续字节标记。因此,四字节UTF-8序列的第一个字节需要5位开销,其余3个字节每字节需要2位开销,剩下21位用于编码码点

1字节UTF-8,7个数据位(U+0000到U+007F):
0xxxxxxx

2字节UTF-8,11个数据位(U+0080到U+07FF):
110xxxxx 10xxxxxx

3字节UTF-8,16个数据位(U+0800到U+FFFF):
1110xxxx 10xxxxx 10xxxxxx

4字节UTF-8,21个数据位(U+10000到U+10FFFF):
11110xxx 10xxxxx 10xxxxx 10xxxxxx


参考:

UTF-8编码有开销。第一个字节使用1-5位表示使用了多少额外字节,每个额外字节使用2位作为延续字节标记。因此,四字节UTF-8序列的第一个字节需要5位开销,其余3个字节每字节需要2位开销,剩下21位用于编码码点

1字节UTF-8,7个数据位(U+0000到U+007F):
0xxxxxxx

2字节UTF-8,11个数据位(U+0080到U+07FF):
110xxxxx 10xxxxxx

3字节UTF-8,16个数据位(U+0800到U+FFFF):
1110xxxx 10xxxxx 10xxxxxx

4字节UTF-8,21个数据位(U+10000到U+10FFFF):
11110xxx 10xxxxx 10xxxxx 10xxxxxx

参考: