go處理中文字符串

先來看一個簡單的例子

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

輸出的結(jié)果為:

字符串長度為: 11
第 1 個字符為: ?
第 2 個字符為: ?
第 3 個字符為: ?
第 4 個字符為: ?
第 5 個字符為: ?
第 6 個字符為: ?
第 7 個字符為: g
第 8 個字符為: u
第 9 個字符為: o
第 10 個字符為: k
第 11 個字符為: e

從上面例子中可以看出,string是以byte數(shù)組形式存儲的,而一個utf8格式的中文占3個byte.要得到正確的中文字符的長度和分割,可以使用rune數(shù)組來拆分. rune類型是int32的別名,一個rune可以表示一個中文字符,go也提供了rune數(shù)組自動拆分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]))
    }
}

得到的輸出結(jié)果為:

字符串長度為: 7
第 1 個字符為: 你
第 2 個字符為: 好
第 3 個字符為: g
第 4 個字符為: u
第 5 個字符為: o
第 6 個字符為: k
第 7 個字符為: e

這樣就能比較好的處理中文了,而且不會出現(xiàn)亂碼的情況.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容