场景
在golang中获取字符串长度的时候,第一个想法就是应用len()函数,在字符串蕴含中文的时候,程序错了。编写了test.go测试文件,代码如下所示。
package mainimport ( "fmt")func main() { str := "test杨先森" fmt.Println("len(str)",len(str))}
执行test.go文件,执行后果如下所示。
问题
最后我认为字符串长度应该是4个英文字母+3个汉字最后,最初后果是13。对,我没有看错就是13。
那惟一的可能,一个中文在这里被解析为3个字符了,而golang默认编码正好是utf-8。
那么我该怎么获取到字符串最实在的长度呢?我这里想获取4个英文字母+3三个汉字,长度为7呢?
解决方案
在这里须要引入两种形式
//golang中的unicode/utf8包提供了用utf-8获取长度的办法 fmt.Println("RuneCountInString:", utf8.RuneCountInString(str)) //通过rune类型解决unicode字符 fmt.Println("rune:", len([]rune(str)))
在test.go文件增加下面的代码,代码如下所示。
package mainimport ( "fmt" "unicode/utf8")func main() { str := "test杨先森" //golang中string底层是通过byte数组实现的,间接应用len 理论是在按字节长度计算,golang默认应用utf-8编码的,所以一个汉字占3个字节。 fmt.Println("len(str)", len(str)) //以下两种都能够失去str的字符串长度 //golang中的unicode/utf8包提供了用utf-8获取长度的办法 fmt.Println("RuneCountInString:", utf8.RuneCountInString(str)) //通过rune类型解决unicode字符 fmt.Println("rune:", len([]rune(str)))}
最终获取到了想要的字符串长度。
参考文献:
中文英文不同编码方式占位几何?
https://segmentfault.com/a/11...