【Go語言陷阱】你可能想不到的字串長度
阿新 • • 發佈:2021-12-24
在Go語言中,我們要統計字串中字元的個數,我們肯定會想到用utf8.RuneCountInString()
但是,這裡我們可能會碰到一個陷阱
我們來看一段程式碼
func main() {
data := "我"
println(utf8.RuneCountInString(data))
data = "é"
println(utf8.RuneCountInString(data))
}
在第3行程式碼中,輸出結果是1,我相信大家都能想得到
在第6行程式碼中,你是否會覺得它會輸出是1?
其實它的輸出結果是 2
是不是感到很奇怪?
因為這是一個組合字元(Combining Diacritical Marks)
é由兩個字元組成分別是e和'https://stackoverflow.com/questions/18578207/strange-length-of-accent-as-%C3%A9-string-return-2
我們肉眼看起來像是一個字元,其實它是由兩個字元組成
é和é這兩個字元肉眼看起來似乎是一樣的
實際情況是前者包含了兩個字元,後者只是一個字元
如果想處理這個問題,可以使用golang.org/x/text/unicode/norm這個包處理下字元https://www.unicode.org/reports/tr15/
以上就是本期內容
我是紅豆,知易行難
我們下期間見