[C#] .NETや.NETCoreでShift_JISを使うとエラーが発生する

C#

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

この記事はこんな人におすすめ!
犬

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

猫

もうShift_JISは使えないの?

解決策はあります

シフトJISのトラブルに困っている方はぜひご一読ください!

 

概要

.NET5以降.NETCoreShift_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への変換を考えてみてもいいかもしれません。

コメント

タイトルとURLをコピーしました