はじめに
.NET Coreや.NET 5+以降の環境で、Shift-JIS(日本語エンコーディング)を使用しようとすると、次のようなエラーが発生することがあります。
System.ArgumentException: 'Shift-JIS' is not a supported encoding name.
これは、.NET Coreや新しい.NETランタイムでは、Shift-JISなどの特定のエンコーディングがデフォルトではサポートされていないためです。しかし、CodePagesEncodingProvider
を使用して、これらのエンコーディングを有効にすることができます。
この記事では、C#とVB.NETでの解決方法を解説します。
エラーの原因
従来の.NET FrameworkではShift-JISエンコーディングがデフォルトでサポートされていましたが、.NET Coreや.NET 5+では軽量化とパフォーマンスの向上を目的に、デフォルトのエンコーディングサポートが制限されています。そのため、Shift-JISなどのコードページベースのエンコーディングを使用する場合は、明示的にサポートを有効にする必要があります。
解決方法
Step 1: CodePagesEncodingProvider
の登録
エンコーディングを有効にするために、アプリケーションの初期化時にCodePagesEncodingProvider
を登録します。これにより、Shift-JISを含む多くのエンコーディングが利用可能になります。
C#での実装
C#では、次のようにしてShift-JISエンコーディングを有効にできます。
using System; using System.Text; class Program { static void Main(string[] args) { // CodePagesEncodingProviderを登録してShift-JISを有効にする Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // Shift-JISエンコーディングを取得 Encoding encoding = Encoding.GetEncoding("Shift-JIS"); // 以下でShift-JISエンコーディングが利用可能です。 } }
VB.NETでの実装
VB.NETでは、同様にCodePagesEncodingProvider
を登録することで、Shift-JISをサポートします。
Imports System.Text Module Program Sub Main() ' Shift-JISをサポートするためのエンコーディングプロバイダを登録 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) ' Shift-JISエンコーディングを取得 Dim encoding As Encoding = Encoding.GetEncoding("Shift-JIS") ' 以下でShift-JISエンコーディングが利用可能です。 End Sub End Module
コードの説明
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)
この一行がポイントです。CodePagesEncodingProvider.Instance
をEncoding.RegisterProvider
に渡すことで、Shift-JISを含む追加のコードページベースのエンコーディングがサポートされるようになります。このメソッドを呼ばなければ、Shift-JISを使おうとした際に、ArgumentException
が発生します。
Encoding.GetEncoding("Shift-JIS")
GetEncoding
メソッドでShift-JISエンコーディングを取得します。このメソッドはエンコーディングの名前を引数として受け取り、そのエンコーディングを使用するオブジェクトを返します。
よくある質問 (FAQ)
1. なぜShift-JISがデフォルトでサポートされていないのですか?
.NET Coreや.NET 5+では、軽量かつ高速なランタイムを目指しており、一般的でないエンコーディングはデフォルトで省かれています。日本語環境でよく使われるShift-JISもその一部です。
2. Encoding.GetEncoding
で他のエンコーディングも使用できますか?
はい、CodePagesEncodingProvider
を登録すれば、Shift-JIS以外にもEUC-JPやISO-2022-JPなど、さまざまなエンコーディングが使用可能です。
3. すべての.NETバージョンでこの方法は使えますか?
この解決方法は、.NET Core 3.0以降および.NET 5+で利用可能です。従来の.NET Frameworkでは、特にエンコーディングプロバイダの登録は不要です。
まとめ
.NET Coreや.NET 5+では、Shift-JISエンコーディングを使用するためにCodePagesEncodingProvider
の登録が必要です。C#やVB.NETでShift-JISを利用する場合、アプリケーションの初期化時にこのプロバイダを登録することで、スムーズにエンコーディングを使えるようになります。
Shift-JISエンコーディングの対応に困っている方は、ぜひこの記事の方法を試してみてください。
コメントを残す