目 录CONTENT

文章目录

Go | 你真的理解 Rune 类型了吗?

如风
2023-09-13 / 0 评论 / 0 点赞 / 41 阅读 / 582 字

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))	// 曾

参考:你会用Go语言的rune类型吗?

编解码

编解码:数据在计算机中都是通过二进制(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’

img

0

评论区