ホーム プログラミング言語 golang go syntax Go言語の文字タイプ(バイトとルーン)

Go言語の文字タイプ(バイトとルーン)

 
 
文字列内の各要素は「文字」と呼ばれ、単一の文字列要素を走査または取得するときに文字を取得できます。

 

Go 言語には 2 種類の文字があります。

  • 1つは、ASCIIコードの文字を表すuint8型、つまりbyte型です。
  • もう 1 つは UTF-8 文字を表すルーン タイプで、日本語、日本語、その他の複合文字を処理する必要がある場合に必要です。ルーン型は int32 型と同等です。

バイト型は uint8 のエイリアスであり、var ch byte = ‘A’ などの 1 バイトのみを占有する従来の ASCII エンコード文字についてはまったく問題なく、文字は一重引用符で囲まれます。

ASCIIコード表ではAの値は65、16進数表記では41となるため、以下の記述方法は等価です。

var ch byte = 65 或 var ch byte = ‘\x41’      //(\x 总是紧跟着长度为 2 的 16 进制数)

もう 1 つの可能性は、 \の後に長さ 3 の 8 進数が続くことです (例: \377)。

Go 言語は Unicode (UTF-8) もサポートしているため、文字は Unicode コード ポイントまたはルーンとも呼ばれ、メモリ内では int で表されます。文書内では一般に U+hhhh の形式で表現します。h は 16 進数を表します。

Unicode 文字を記述する場合は、16 進数の前に接頭辞\uまたは\Uを追加する必要があります。 Unicode は少なくとも 2 バイトを占めるため、int16 または int 型を使用して表現します。最大 4 バイトを使用する必要がある場合は\u接頭辞を使用し、最大 8 バイトを使用する必要がある場合は\U接頭辞を使用します。

var ch int = '\u0041'
var ch2 int = '\u03B2'
var ch3 int = '\U00101234' fmt.Printf("%d - %d - %d\n", ch, ch2, ch3) // 整数 fmt.Printf("%c - %c - %c\n", ch, ch2, ch3) // 文字 fmt.Printf("%X - %X - %X\n", ch, ch2, ch3) // UTF-8バイト fmt.Printf("%U - %U - %U", ch, ch2, ch3) // UTF-8コードポイント

出力:

65 – 946 – 1053236
A – β – r
41 – 3B2 – 101234
U+0041 – U+03B2 – U+101234

書式指定子%c文字を表すために使用されます。文字と一緒に使用すると、 %vまたは%d文字を表す整数を出力し、 %U U+hohh の形式で文字列を出力します。

Unicode パッケージには文字をテストするための組み込み関数がいくつかあり、これらの関数の戻り値は次のようなブール値です (ch は文字を表します)。

  • それが文字であるかどうかを判断します: unicode.IsLetter(ch)
  • 数値かどうかを判断します: unicode.IsDigit(ch)
  • 空白シンボルかどうかを判断します: unicode.IsSpace(ch)

UTF-8 と Unicode の違いは何ですか?

Unicode は、ASCII と同様に文字セットです。

文字セットは、各文字に一意の ID を割り当てます。使用するすべての文字は、Unicode 文字セット内で一意の ID を持ちます。たとえば、上の例の a のエンコードは、Unicode と ASCII の両方で 97 です。 Unicode における漢字「you」のエンコードは 20320 です。各国の文字セットでは、文字に対応する ID が異なります。いずれの場合も、Unicode での文字の ID は変わりません。

UTF-8 は、Unicode の文字 ID を特定の方法でエンコードするエンコード ルールであり、1 バイトから 4 バイトまでの可変長のエンコード ルールです。エンコード規則は次のとおりです。

  • 0xxxxxx は、ASCII 文字セットと互換性のある文字記号 0 ~ 127 を示します。
  • 128 から 0x10ffff は他の文字を表します。

この規則によれば、ラテン語族の文字エンコーディングは一般に 1 文字あたり 1 バイトを占有しますが、日本語の 1 文字は 3 バイトを占有します。

広い意味での Unicode は、文字セットとエンコード規則、つまり Unicode 文字セットと UTF-8、UTF-16 エンコードなどを定義する標準を指します。

 

「 Go言語の文字タイプ(バイトとルーン)」についてわかりやすく解説!絶対に観るべきベスト2動画

【たった1時間で学べる】Go言語のプログラミング初心者向けの超入門講座【文字書き起こし、ソースコードも完全無料!】
【初心者必見!】Go言語とは?できることや学ぶメリット・将来性について解説