问题原因:
由于中文一个字不只是由一个字节组成,所以直接通过切片获取时可能会把一个中文字的编码截成两半,结果导致最后一个字符是乱码。
解决方案:
先将其转为[]rune类型,再截取后,转回字符串类型。
示例:
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
//声明一个字符串变量str
str := "golang截取一个中文字符串字符串"
//打印字符串长度
fmt.Println(utf8.RuneCountInString(str))
//打印字节长度
fmt.Println(len(str))
//获取字符串的前10个字符
str1 := str[0:9]
//打印
fmt.Println(str1)
//将字符串转为[]rune类型
nameRune := []rune(str)
//打印转换后的长度
fmt.Println(len(nameRune))
//打印截取后的字符串前10个字符
fmt.Println("string = ", string(nameRune[0:9]))
}