Goでは、Runeはint32
データ型のエイリアスであり、単一のUnicodeコードポイントを表します。つまり、ルーンは、文字、数字、句読点、さらには絵文字など、ユニコード標準の任意のキャラクターを表すことができます。ルーンはGOのテキストの構成要素であり、ASCII以外の文字を含む国際的なテキストを扱う場合に特に役立ちます。
ゴーのルーン、文字列、およびユニコードの関係は、言語でテキストがどのように処理されるかを理解するための基本です。 GO文字列はバイトのシーケンスですが、テキスト処理を含む操作で使用する場合、ユニコードコードポイント(ルーン)のシーケンスとして解釈されます。文字列を繰り返したり、ルーンのスライスに変換したりすると、バイトをユニコードコードポイントにデコードして、エンコードに関係なく個々の文字を使用できます。
たとえば、テキスト「カフェ」を含む文字列を検討してください。 GOの文字列として表されると、バイトのシーケンスとして保存されますが、それを反復またはルーンに変換すると、 'c'、 'a'、 'f'、および 'é'のシーケンスのシーケンスとして解釈されます。これにより、「é」はUTF-8エンコーディングの複数のバイトで表されていても、個々の文字を使用できます。
Go Stringでルーンを繰り返すには、forループのrange
キーワードを使用できます。 range
が文字列で使用されると、そのインデックスでインデックスとルーンを返します。これを行う方法の例は次のとおりです。
<code class="go">str := "café" for _, runeValue := range str { fmt.Printf("%c", runeValue) }</code>
この例では、 runeValue
弦の各ルーンの値を順番に引き受けます。 _
、ルーン自体にのみ興味があるため、インデックスを無視するために使用されます。
GOに文字列を使用してrange
を使用すると、マルチバイトユニコード文字が適切に処理されることに注意することが重要です。従来のインデックスベースのアプローチを使用して文字列を反復する場合、マルチバイト文字を誤って分割する可能性があります。
GOはunicode/utf8
パッケージにいくつかの機能を提供し、ルーンと文字列間を変換します。
ルーンへの文字列:
utf8.DecodeRuneInString(s string) (r rune, size int)
:この関数は、文字s
の最初のルーンを解読し、ルーンとそれが占めるバイト数を返します。[]rune(s string)
:文字列をルーンのスライスに変換することは、GOの個々の文字と連携する一般的な方法です。例:
<code class="go">str := "café" runes := []rune(str) fmt.Println(runes) // Output: [99 97 102 233]</code>
文字列へのルーン:
string(runes []rune)
:ルーンのスライスを弦に戻すのは簡単です。例:
<code class="go">runes := []rune{99, 97, 102, 233} str := string(runes) fmt.Println(str) // Output: café</code>
いくつかの重要な方法でルーンを使用してUnicode文字を処理します:
キャラクター操作:
ルーンを使用すると、個々のユニコード文字で操作を実行できます。たとえば、ルーンを使用して、文字が文字、数字、またはunicode
パッケージの関数を使用して特定のUnicodeカテゴリであるかどうかを確認できます。
例:
<code class="go">r := 'é' if unicode.IsLetter(r) { fmt.Println("The character is a letter.") }</code>
unicode/utf8
パッケージにはutf8.ValidString(s string)
などの関数が含まれており、文字列に有効なUTF-8シーケンスが含まれているかどうかを確認します。これは、テキストデータが正しく解釈されることを保証するために重要です。全体として、GOはUnicode文字を処理するためにルーンを使用しています。テキストデータを操作するための堅牢で柔軟な方法が提供され、国際化とキャラクターエンコーディングの問題が適切に管理されるようにします。
以上がゴーのルーンは何ですか?それらは文字列とユニコードとどのように関係していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。