Go编译器如何知道字节片中的哪些字节应该组合成一个符文



示例:

func main() {
byteSlice := []byte{226, 140, 152, 97, 98, 99}
fmt.Println(string(byteSlice))
}

打印输出:

⌘abc

在引擎盖下,Go怎么知道前三个字节226, 140, 152应该被分组为一个uint32符文:,而剩下的字节应该分别转换为三个单独的符文:abc

通过将UTF-8编码解码为UTF-32。

一个简单的问题是查看每个八位位组的前导位,屏蔽前哨位,并将数据位与位偏移和逐位OR组合。

代码点↔UTF-8转换

字节1字节210xxxx
第一个代码点 最后一个代码点 字节3字节4
U+0000 U+007F 0xxxxxxx
U+0080 U+07FF 110xxxxxx
U+0800 U+FFFF 110xxxx 10xxxxxx
U+10000 U+10FFFF 11110xxx 10xxxxxx

最新更新