汉字3字节,rune4字节,为什么index[3]的下一个是index[6]?

来源:3-6 字符和字符串处理

拧壶冲

2020-08-26

如标题,汉字占3个字节,rune是4个字节的,那么既然是以rune的结构存放的汉字,那么每个数据都应该是4个字节才对啊,为什么index[3]的下一个汉字的其实index是6?
图片描述

写回答

1回答

ccmouse

2020-09-02

go语言的字符串本身是utf-8编码的,汉子占三个字节,所以[3]后面是[6]

当我们用for循环来拿里面的元素时,for i, ch := range s,这里获得的ch已经经过了utf-8 => unicode的转换,转换的结果放在了ch里面。utf-8和unicode是不同的编码方式。

我们这里也看到,这个字符的utf-8编码是0xE68595,而我们拿到的ch是0x7231,go语言的运行环境已经帮我们做了一次转换

0
2
ccmouse
回复
拧壶冲
第一段是对的。第二段,它不需要新开辟连续的空间。for的时候,UTF-8发现是中文三字节,就把三个字节取出,作转换,转换后的结果赋值给ch就行。就相当于一个整数赋值。
2020-09-03
共2条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程