UTF8 编码如何支持内存中 1 到 4 个字节的范围?



我希望在晚上的这个时候这不是一个愚蠢的问题,但我似乎无法理解它。

UTF-8 是一种可变长度编码,每个字符至少 8 位。具有较高代码点的字符最多需要 32 位。

因此,UTF-8 可以对 1 到 4 个字节范围内的 unicode 字符进行编码。

这是否意味着在单个 UTF-8 编码字符串中,一个字符可能是 1 个字节,另一个字符可能是 3 个字节?

如果是这样,在此示例中,计算机在从 UTF-8 解码时如何不尝试将这两个单独的字符视为一个 4 字节字符?

如果数据以 UTF-8 的形式保存在内存中,那么,是的,它将是一个可变宽度编码。

但是,编码允许解析器知道您正在查看的字节是代码点的开头还是额外的字符。

从 UTF-8 的维基百科页面:

Bytes  Bits    First     Last      Bytes
1      7     U+000000  U+00007F  0xxxxxxx
2     11     U+000080  U+0007FF  110xxxxx 10xxxxxx
3     16     U+000800  U+00FFFF  1110xxxx 10xxxxxx 10xxxxxx
4     21     U+010000  U+10FFFF  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

最新更新