文字列からUnicode文字を取得するにはどうすればよいですか。たとえば、文字列が「你好」の場合、最初の文字「你」を取得するにはどうすればよいですか?
別の場所から私は1つの方法を取得します。
var str = "你好"
runes := []rune(str)
fmt.Println(string(runes[0]))
それは動作します。しかし、私はまだいくつかの質問があります:
それを行う別の方法はありますか?
なぜGoではstr[0]
文字列からUnicode文字を取得しませんが、バイトデータを取得しますか?
まず、あなたは読みたいかもしれません https://blog.golang.org/strings それはあなたの質問の一部に答えます。
Goの文字列には、任意のバイトを含めることができます。 str [i]を書き込むと、結果はバイトになり、インデックスは常にバイト数になります。
ほとんどの場合、文字列はUTF-8でエンコードされます。文字列のUTF-8エンコーディングを処理する方法は複数あります。
たとえば、for ... rangeステートメントを使用して、ルーンごとに文字列ルーンを反復できます。
var first rune
for _,c := range str {
first = c
break
}
// first now contains the first rune of the string
Unicode/utf8パッケージを活用することもできます。例えば:
r, size := utf8.DecodeRuneInString(str)
// r contains the first rune of the string
// size is the size of the rune in bytes
文字列がUTF-8でエンコードされている場合、ルーン文字のサイズ(バイト単位)は一定ではないため、文字列のn番目のルーンに直接アクセスする方法はありません。この機能が必要な場合は、独自のヘルパー関数を簡単に記述して(for ... rangeを使用して、またはunicode/utf8パッケージを使用して)できます。