16

中国語の文字列があります:

x = "你好"

私はそれをループして、その中の各文字で何かをしたいと思います.

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

Google の後、文字列の実際の長さを返すメソッドを見つけましたが、正しい文字を取得するためにループする方法はlen(x)まだわかり6ません..2RuneCountInStringx[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 に答える