目次
検証環境
- .NET Core 3.1
- System.Text.Encoding.CodePages 5.0.0
実装
NuGet で System.Text.Encoding.CodePages をインストールする。
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var enc = Encoding.GetEncoding("Shift_JIS");
補足
Encoding.Default
Encoding.Default でシステムのデフォルトエンコーディングを取得できるが、.NET Framework と .NET Core 以降では値が変わる。
.NET Framework では Shift_JIS であったが、 .NET Core では UTF-8 となる。
UTF-8
Encoding.UTF8 で取得する Encoding は BOM 付きとなる。
new UTF8Encoding() で引数 encoderShouldEmitUTF8Identifier に false を設定した場合は BOM なしとなる。デフォルトが false のため、引数なしで初期化しても同様である。
Encoding.Default で取得する UTF-8 の Encoding は BOM なしである。
StreamWriter でそれぞれのエンコードを指定して書き出した時のバイト列は次の通り。 「EF-BB-BF-」がBOMの部分。

Encoding.Default E3-83-91-E3-83-B3-E3-81-AE-E8-80-B3 Encoding.UTF8 EF-BB-BF-E3-83-91-E3-83-B3-E3-81-AE-E8-80-B3-0D-0A UTF8Encoding(encoderShouldEmitUTF8Identifier:false) E3-83-91-E3-83-B3-E3-81-AE-E8-80-B3-0D-0A