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

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

0%