在截取包含中文的字符串的时候,发现截取出来的字符串比目标字符串相差太多。
golang中string底层是通过byte数组实现的。
中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。
于是做了一下转化:
con := []rune(trimHtml(result.Content))//将字符串转化为rune类型的
if len(con) > 50 {
con = con[:50]//截取自己想要的长度
}
result.Content = string(con)//再转化为string类型
将字符串转化为rune类型的;然后再进行截取
1、type 占一个字节
2、rune 英文占一个字节,中文占三个字节
3、string底层是用byte数组存的,并且是不可以改变的。
4、在 Go 中,字符串是以 UTF-8 为格式进行存储的,在字符串上调用 len 函数,取得的是字符串包含的 byte 的个数。
- byte 等同于int8,常用来处理ascii字符
- rune 等同于int32,常用来处理unicode或utf-8字符