我希望在晚上的这个时候这不是一个愚蠢的问题,但我似乎无法理解它。
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