1. 程式人生 > 其它 >【Go語言陷阱】你可能想不到的字串長度

【Go語言陷阱】你可能想不到的字串長度

在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/

以上就是本期內容

我是紅豆,知易行難

我們下期間見