GO学习笔记(3) - 字符串操作

80 阅读1分钟

字符长度

len得到字符长度 ,utf8.RuneCountInString字符串长度

var s string
s="Yes问天地之悠悠!"
fmt.Println("len(s)",len(s))
fmt.Println("len(s)",len([]byte(s)))
fmt.Println("len([]rune(s))",len([]rune(s)))
fmt.Println("len(s)",utf8.RuneCountInString(s))

字符转数组与字节

var bytes = []byte(s)
fmt.Println(bytes)
var runes = []rune(s)
fmt.Println(runes)

#字符编码 go默认的编码UTF-8,每个字符占3个字节 Golang 内建支持 UTF-8 编码,支持转化到其它编码,例如:GBK编码,可以使用 Go 官方的 [golang.org/x/text] 包进行转换,代码如下:

// transform GBK bytes to UTF-8 bytes
func GbkToUtf8(str []byte) (b []byte, err error) {
	r := transform.NewReader(bytes.NewReader(str), simplifiedchinese.GBK.NewDecoder())
	b, err = ioutil.ReadAll(r)
	if err != nil {
		return
	}
	return
}

// transform UTF-8 bytes to GBK bytes
func Utf8ToGbk(str []byte) (b []byte, err error) {
	r := transform.NewReader(bytes.NewReader(str), simplifiedchinese.GBK.NewEncoder())
	b, err = ioutil.ReadAll(r)
	if err != nil {
		return
	}
	return
}

#rune 即 Unicode code points ;可以简单理解为Unicode 用来表示每一个字符的 key,例如:汉字的“字”的十进制使用23383表示,这就是一个编码点。