16

我有一个中文字符串:

x = "你好"

我想遍历它并对其中的每个角色做一些事情,比如:

for i, len := 0, len(x); i < len; i++ {
    foo( x[i] ) // do sth.
}

我发现它len(x)会返回6而不是2,在谷歌之后我找到了RuneCountInString返回字符串实际长度的方法,但我仍然不知道如何循环以x[i]获取正确的字符,x[0] == '你'例如..

谢谢

4

1 回答 1

31

使用range.

x = "你好"
for _, c := range x {
    // do something with c
}

如果您想要随机访问,则需要使用代码单元索引而不是字符索引。幸运的是,没有充分的理由需要字符索引,所以代码单元索引很好。

大多数语言都有完全相同的问题。例如,Java 和 C# 使用 UTF-16,它也是一种可变长度编码(但有些人假装不是)。

有关Go 为何使用 UTF-8 的更多信息,请参阅UTF-8 宣言。

于 2012-10-05T05:52:01.633 回答