乐趣区

关于golang: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/que…
咱们肉眼看起来像是一个字符,其实它是由两个字符组成

é和é 这两个字符肉眼看起来仿佛是一样的

理论状况是前者蕴含了两个字符,后者只是一个字符

如果想解决这个问题,能够应用 golang.org/x/text/unicode/norm 这个包解决下字符
https://www.unicode.org/repor…

以上就是本期内容

我是红豆,知易行难

咱们下期间见

退出移动版