我希望这在夜晚的这个时候不是一个愚蠢的问题,但我似乎无法绕过它。
UTF-8是一种可变长度编码,每个字符至少8位。代码点较高的字符最多需要32位。
因此UTF-8可以编码1到4个字节范围内的unicode字符。
这是否意味着在单个UTF-8编码的字符串中,一个字符可能是1个字节而另一个字符可能是3个字节?
如果是这样,在这个例子中,当从UTF-8解码时,计算机如何不尝试将这两个单独的字符视为一个4字节字符?
答案 0 :(得分:1)
如果数据在内存中保存为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