golang截取中文字符串乱码解决方案

问题原因:

由于中文一个字不只是由一个字节组成,所以直接通过切片获取时可能会把一个中文字的编码截成两半,结果导致最后一个字符是乱码。

 

解决方案:

先将其转为[]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]))
}