首页 >> Golang >> 内容页

Golang对中文字符串截取不出现乱码的方法

在使用golang的时候,如果直接对string截取,有可能接触出来的字符串最后是一个不能显示的乱码。

s := "中文字符串"
fmt.Println(s[:4])

这是因为对字符串的截取犹如是对btye(8bit)数组的截取,而中文是不止一个字节的,所以就造成截取一个字的一半。而无法显示

解决方法

转换成[]rune

s := "中文字符串"
s2 := []rune(s)
fmt.Println(string(s2[:4]))

同时len(rune)才是中文字符串的字符个数

byte和rune在golang中的定义


// byte is an alias for uint8 and is equivalent to uint8 in all ways. It is
// used, by convention, to distinguish byte values from 8-bit unsigned
// integer values.
type byte = uint8
// rune is an alias for int32 and is equivalent to int32 in all ways. It is
// used, by convention, to distinguish character values from integer values.
type rune = int32

rune类型为4字节常用来处理unicode或utf-8字符