美文网首页
go处理中文字符串

go处理中文字符串

作者: 岑吾 | 来源:发表于2021-10-08 21:00 被阅读0次

    先来看一个简单的例子

    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
    

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

    相关文章

      网友评论

          本文标题:go处理中文字符串

          本文链接:https://www.haomeiwen.com/subject/vptfoltx.html