
System.ArgumentException
HResult=0x80070057
Message='Shift_JIS' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. Arg_ParamName_Name
Source=System.Private.CoreLib
スタック トレース:
場所 System.Text.EncodingTable.InternalGetCodePageFromName(String name)
場所 System.Text.EncodingTable.GetCodePageFromName(String name)
場所 System.Text.Encoding.GetEncoding(String name)
場所 Program.<Main>$(String[] args) (D:\dev2\curict\content\item\dotNET-Core\data\dotNET5-sjis\ConsoleCSharp2022-dotNet6.zip\ConsoleApp\Program.cs):行 12
shift-jis(sjis) を使用できるようにする方法
Encoding.RegisterProvider メソッドを使用し、CodePagesEncodingProvider を登録します。using System.Text;
// コードページ エンコーディング プロバイダーを登録
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
- プロバイダーは1度登録すると、プログラムが終了するまで有効です。
- プロバイダーを登録したプログラムのみ有効で、他のプログラムや環境などには影響しません。
- エラーが解消しない場合、System.Text.Encoding.CodePages.dll アセンブリへの参照をプロジェクトに追加します。
サンプルコード
次のコードを実行すると 例外「System.ArgumentException」が発生します。using System.Text;
Encoding shiftJisEncoding = Encoding.GetEncoding("Shift_JIS");
次のコードはプロバイダー登録をしているため、エラーが発生しません。
using System.Text;
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Encoding shiftJisEncoding = Encoding.GetEncoding("Shift_JIS");
プロバイダー登録が必要か、判別する方法
プロジェクトのプロパティから、ターゲットフレームワークを確認します。登録が必要なのはターゲットフレームワークが「.Net Core 1.0 ~ .Net Core 3.1」と、「.NET 5 ~ 」のプロジェクトです。「.NET Framework 1.0 ~ .NET Framework 4.8」では必要ありません。

参考資料
- Microsoft 公式ドキュメント- Encoding.RegisterProvider(EncodingProvider) メソッド
- Microsoft 公式ドキュメント- CodePagesEncodingProvider クラス
検証環境
- .NET 6.0
- Microsoft Visual Studio Enterprise 2022 Version 17.2.6
- Microsoft Windows 10 Enterprise Version 21H2 OS Build 19044.2130 Experience: Windows Feature Experience Pack 120.2212.4180.0