この記事では、.NETや.NETCoreでShift_JISを使うとエラーが発生する件について解説します。

Shift_JISエンコーディングを使おうとしたらエラーが出た!

もうShift_JISは使えないの?
解決策はあります!
シフトJISのトラブルに困っている方はぜひご一読ください!
概要
.NET5以降や.NETCoreでShift_JIS(シフトJIS)のエンコーディングを使おうとしたら、下記のようにエラーが発生します。
エラーが発生するコード例
Encoding enc = Encoding.GetEncoding("shift_jis");
エラー内容
System.ArgumentException: ''shift_jis' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. (Parameter 'name')'
こちらのエラーは、「shift_jis」というエンコード名がサポートされていないことを示しています。
エラーの通り、.NET5以降や.NETCoreでは、Shift_JISのようなレガシーエンコーディングはデフォルトで無効になっています。
少し昔の.NET Frameworkなどでは普通に使えていたのですが、現在は非推奨のようです。
とはいえ、実情としてはShift_JISを使わないといけない場面もあるでしょう。
次項で具体的な解決策を紹介します。
解決策
解決策は簡単で、下記のようにShift_JISの取得前に1行を追加すればOKです。
サンプルコード
using System.Text;
namespace SampleCode
{
class SampleCode
{
static void Main()
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Encoding enc = Encoding.GetEncoding("shift_jis");
}
}
}
System.Text.Encoding.RegisterProviderでエンコーディングプロバイダを登録すれば、Shift_JISのようなデフォルト以外のエンコーディングも使えるようになります。
まとめ
以下は当記事のまとめです!
- .NET5以降や.NETCoreでは、デフォルトでShift_JISが無効になっている
- System.Text.Encoding.RegisterProviderで登録すればShift_JISも使えるようになる
Shift_JISは日本語を取り扱う上で優れている面もありますが、文字化け等のトラブルの原因になりがちですので、基本的には国際標準として使われているUTF-8を使ったほうが良いでしょう。
今回の方法は有効な解決策ですが、乱用はせず、可能であればUTF-8への変換を考えてみてもいいかもしれません。
コメント