C# 11 の新機能を確認しています。目次は次の記事です。
rksoftware.hatenablog.com
今回は 「 UTF-8 の文字列リテラル 」。公式 Learn の記事は次です。
文字列の後ろ ( 閉じの "
の後ろ ) に u8 を付けると UTF-8 エンコードの System.ReadOnlySpan<T> が得られます。
■ 確認
次のコードを実行すると、 UTF8 エンコードの結果と u8 の結果が同じになります。
foreach (var c in "埼玉".ToArray()) Console.Write(c); // 埼玉 Console.WriteLine(); foreach (var c in System.Text.Encoding.Unicode.GetBytes("埼玉")) Console.Write(c); // 25287137115 Console.WriteLine(); foreach (var c in System.Text.Encoding.UTF8.GetBytes("埼玉")) Console.Write(c); // 229159188231142137 Console.WriteLine(); foreach (var c in "埼玉"u8) Console.Write(c); // 229159188231142137
実行結果
埼玉 25287137115 229159188231142137 229159188231142137
■ 実際の型
ReadOnlySpan<byte> になるようです。コードで確認は難しいので画像で。
つまり、遺産的なコードで書くとこうです。
ReadOnlySpan<byte> saitama = "埼玉"u8;
■ 使いこなしましょう
全てが .NET のアプリ内で完結している場合はあまり必要ないかもしれませんが、他の仕組みと連携するときのインターフェイスが UTF-8 バイト列ということは結構あるのではないでしょうか? 使いこなしましょう。