ホームページ >バックエンド開発 >Golang >Go の文字列インデックス作成で常に予期した文字が返されないのはなぜですか?

Go の文字列インデックス作成で常に予期した文字が返されないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-14 16:18:14659ブラウズ

Why Doesn't String Indexing in Go Always Return the Expected Character?

Golang 文字列内の文字のインデックス付け

文字列から文字を取得するには、インデックス付け操作を使用します。ただし、インデックス付きの値が予期された文字と一致しない場合があります。たとえば、以下のコードでは:

package main

import "fmt"

func main() {
    fmt.Print("HELLO"[1])
}

出力は文字「E」ではなく 69 です。

Golang 文字列エンコーディングについて

Golang は文字列リテラルに UTF-8 エンコーディングを使用します。文字「E」を含む ASCII 文字は 1 バイトを占めます。ただし、大きな Unicode 文字は複数のバイトで表現される場合があります。

文字のインデックス作成にルーン文字を使用する

文字を正しくインデックスするには、Unicode コード ポイントを表す整数の runes を使用します。ルーンは、UTF-8 の文字の基礎となるタイプです。 rune() 関数を使用してバイトをルーンに変換できます。

バイトを文字に変換

バイトを対応する文字に変換するには、 string() 関数:

fmt.Println(string("Hello"[1])) // ASCII only

このアプローチは ASCII ではうまく機能します文字。

ルーンを文字に変換する

Unicode 文字の場合、[]rune() スライスを使用してルーンを文字に変換できます:

fmt.Println(string([]rune("Hello, 世界")[1])) // UTF-8

Unicode の例文字

次の例を考えてみましょう:

fmt.Println(string([]rune("Hello, 世界")[8])) // UTF-8

これは、漢字「世界」の Unicode コード ポイントである「界」を出力します。

追加リソース

  • [Go プログラミング言語仕様]変換に関するセクション](https://golang.org/ref/spec#Conversions)
  • [Go ブログ: Go の文字列、バイト、ルーン文字、文字](https://blog.golang.org /strings-bytes-runes-and-characters-in-go)

以上がGo の文字列インデックス作成で常に予期した文字が返されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。