李成笔记网

专注域名、站长SEO知识分享与实战技巧

golang 字节(byte)与字符(char)的区别

字节(byte)与字符(char)的区别

字节(Byte)是计量单位, 表示数据量多少, 是计算机信息技术用于计量存储容量的一种计量单位, 通常情况下一字节等于八位。

字符(Character)计算机中使用的字母、数字、字和符号, 比如'A'、'B'、'#39;、'&'等。

一般在英文状态下一个字母或字符占用一个字节, 一个汉字用两个字节表示。

字节与字符:

ASCII 码中, 一个英文字母(不分大小写)为一个字节, 一个中文汉字为两个字节。

UTF-8 编码中, 一个英文字为一个字节, 一个中文为三个字节。

Unicode 编码中, 一个英文为一个字节, 一个中文为两个字节。

符号: 英文标点为一个字节, 中文标点为两个字节。例如: 英文句号 . 占1个字节的大小, 中文句号 。占2个字节的大小。

UTF-16 编码中, 一个英文字母字符或一个汉字字符存储都需要 2 个字节(Unicode 扩展区的一些汉字存储需要 4 个字节)。

UTF-32 编码中, 世界上任何字符的存储都需要 4 个字节。

在 Golang 中, 如果字符串中出现中文字符不能直接调用 len 函数来统计字符串字符长度, 这是因为在 Go 中, 字符串是以 UTF-8 为格式进行存储的, 在字符串上调用 len 函数, 取得的是字符串包含的 byte 的个数。

每个中文字, 占3个byte。所以:

str1 := "Hello,世界"

fmt.Println(len(str1)) // 打印结果:12

英文字符仍是占一个byte。

Go语言的字符有以下两种:

一种是 uint8 类型, 或者叫 byte 型, 代表了 ASCII 码的一个字符。byte 是 uint8的别名

另一种是 rune 类型, 代表一个 UTF-8 字符, 当需要处理中文、日文或者其他复合字符时, 则需要用到 rune 类型。rune 类型等价于 int32 类型。

案例: 统计中文的个数

package main
import (
    "fmt"
    "unicode"
)
func ChineseCount(str1 string) (count int) {
    for _, char := range str1 {
        if unicode.Is(unicode.Han, char) { // 判断是否是中文
            count++
        }
    }
    return
}
func main() {
    str_obj := "Hello你好WorldGo语言真强"
    result := ChineseCount(str_obj)
    fmt.Println("result=", result) // 6 个 统计中文的中文个数
}

案例: 字符串元素的个数(英文一个, 中文一个)

package main
import (
"fmt"
"unicode/utf8"
)
func main() {
    a := "I love my family!我爱我的家人!"
    // 方法一:
    b := []rune(a) //转换为rune:一个字符对应一个元素 (共24个)
    fmt.Println(len(b)) //获取元素的个数(24)
    //方法二: 更简单的方法 utf8.RuneCountInString 专门用于计算字符数
    fmt.Println(utf8.RuneCountInString(a)) // 24
    for _, v2 := range b {
    		fmt.Printf("%c", v2) //输出结果:I love my family!我爱我的家人!
		}
}

案例: 获取字符串字节的个数(英文一个字节, 中文三个字节)

package main
import (
"fmt"
)
func main() {
    var str string = "abc郑闯" //共9个字节
    charray := []byte(str) //转换为byte: 一个字节对应一个数组元素
    fmt.Println(len(charray)) //获取元素的个数,结果为9
    for _, v := range charray {
        fmt.Printf("%c", v) //输出结果为:abcééˉ
    }
}

字节数和字符数区别:

字节数: 因为一个字节, 中文三个字节;

字符数: 英文一个, 中文一个;

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言