【问题标题】:In what circumstances would 32-bits be required in UTF-8 encoding?在什么情况下 UTF-8 编码需要 32 位?
【发布时间】:2015-10-29 17:21:46
【问题描述】:
根据我的理解和我在网上阅读的内容,UTF-8 可以使用 1-4 个代码单元(每个长度为一个字节)来编码 Unicode 字符集中的所有字符。我想知道的是:既然 Unicode 中的所有代码点都可以用 21 位表示,那么你什么时候会使用 4 个代码单元而不是 3 个?
您只需要 24 位来表示任何 Unicode 字符,那么您什么时候会在 UTF-8 编码中使用 32 位,为什么?是否需要额外的位来存储某种额外的数据?
【问题讨论】:
标签:
unicode
encoding
utf-8
【解决方案1】:
UTF-8 编码有开销。第一个字节使用 1-5 位来表示使用了多少附加字节,每个附加字节使用 2 位作为连续字节标记。因此,一个 4 字节的 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 10xxxxxx 10xxxxxx
4 字节 UTF-8,21 个数据位(U+10000 到 U+10FFFF):11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
参考:UTF-8