go处理中文字符串

先来看一个简单的例子

func main() {
    str := "你好guoke"
    fmt.Println("字符串长度为:", len(str))
    for i:=0; i<len(str); i++{
        fmt.Println("第",i+1,"个字符为:",str[i:i+1])
    }
}

输出的结果为:

字符串长度为: 11
第 1 个字符为: �
第 2 个字符为: �
第 3 个字符为: �
第 4 个字符为: �
第 5 个字符为: �
第 6 个字符为: �
第 7 个字符为: g
第 8 个字符为: u
第 9 个字符为: o
第 10 个字符为: k
第 11 个字符为: e

从上面例子中可以看出,string是以byte数组形式存储的,而一个utf8格式的中文占3个byte.要得到正确的中文字符的长度和分割,可以使用rune数组来拆分. rune类型是int32的别名,一个rune可以表示一个中文字符,go也提供了rune数组自动拆分string中文字符的方法rt := []rune(str).

我们再把上面例子修改一下:

func main() {
    str := "你好guoke"
    rt := []rune(str)
    fmt.Println("字符串长度为:", len(rt))
    for i:=0; i<len(rt); i++{
        fmt.Println("第",i+1,"个字符为:",string(rt[i]))
    }
}

得到的输出结果为:

字符串长度为: 7
第 1 个字符为: 你
第 2 个字符为: 好
第 3 个字符为: g
第 4 个字符为: u
第 5 个字符为: o
第 6 个字符为: k
第 7 个字符为: e

这样就能比较好的处理中文了,而且不会出现乱码的情况.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容