Go | 你真的理解 Rune 类型了吗?
- rune就是int32的别名,用来处理Unicode和UTF-8编码,占用4个字节
- byte相当于int8,用来处理ASCII编码,占用一个字节,相比于byte类型,rune可以处理一切字符。
- Golang的底层数组是通过byte数组实现的,Golang的默认编码方式是 UTF-8,中文字符在 Unicode编码占2个字节,在UTF-8占用3个字节。
中文字符占用3个字节
s := "Hello王"
sHello := "Hello"
sWang := "王"
//len()获得的是 byte 字节的数量
fmt.Println(len(s)) // 8
fmt.Println(len(sHello)) // 5
fmt.Println(len(sWang)) // 3
对字符串进行遍历
str := "hello王"
for i, v := range str {
fmt.Printf("%T-%T", str[i], v) // uint8-int32
fmt.Printf("%c\n", str[i]) // 王会乱码
fmt.Printf("%c\n", v) // 王不会乱码
}
修改字符串,因为Go的字符串不能直接修改,所以可以转化为rune类型进行修改
str1 := "王"
str2 := []rune(str1)
str2[0] = '曾'
fmt.Println(string(str2)) // 曾
编解码
编解码:数据在计算机中都是通过二进制(0,1)进行存储的,将我们看的懂的数据转化为计算机看得懂的数据叫做编码,反之叫做解码
编码的方式
- 一开始是使用 ASCII 编码,八个bit作为一个字节(byte), 只有127个字符存储到计算机
- 之后随着计算机的发展传到各个国家,不同国家有不同的编码方式,比如我们国家的GB2312编码。所以需要一个统一的编码方式,Unicode 应运而生,Unicode将所有的语言统一到一套编码中。ASCII编码占用一个字节,Unicode编码占用两个字节
- 如果都是英文,使用Unicode就会浪费空间,所以把Unicode编码转化为可变长编码的UTF-8编码,编码速度较慢,ACSII编码可以看做是UTF-8的一种。
常用的ASCII码:48-‘0’ 65-‘A’ 97-‘a’
评论区