【Go语言陷阱】你可能想不到的字符串长度

掌上阅读,微信搜【万有引力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/

图片

以上就是本期内容

我是红豆,知易行难

我们下期间见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值