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

时间:2018-01-05 08:55:55

标签: utf-8 character-encoding

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

  

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

来自Wikipedia page for 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