rksoftware

Visual Studio とか C# とかが好きです

C# 11 の新機能を確認「UTF-8 の文字列リテラル」

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 バイト列ということは結構あるのではないでしょうか? 使いこなしましょう。