掌上阅读,微信搜【万有引力HD】
在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/
以上就是本期内容
我是红豆,知易行难
我们下期间见