.NET Core アプリケーションで Shift-JIS のエンコーディングでファイルを読み込むとエラーが発生する - C#

.NET Core アプリケーションで Shift-JIS のエンコーディングでファイルを読み込むとエラーが発生する現象について紹介します。

概要

.NET Core アプリケーションで従来のWindows Formアプリケーションと同じコードで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. '

現象の確認

以下のプログラムを作成します。

UI

下図のフォームを作成します。Buttonを2つ、複数行のTextBox、OpenFileDialog、SaveFileDialogを配置します。

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace ShiftJISReadWrite
{
  public partial class FormSjisReadWrite : Form
  {
    public FormSjisReadWrite()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      if (openFileDialog1.ShowDialog() == DialogResult.OK) {
        FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open);
        StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("shift-jis"));
        string ReadText = sr.ReadToEnd();
        sr.Close();
        fs.Close();
        textBox1.Text = ReadText;
      }
    }

    private void button2_Click(object sender, EventArgs e)
    {
      if (saveFileDialog1.ShowDialog() == DialogResult.OK) {
        FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.OpenOrCreate);
        StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("shift-jis"));
        sw.Write(textBox1.Text);
        sw.Close();
        fs.Close();
      }
    }
  }
}

解説

従来の.NET Framework でのテキストファイルの読み込み、書き出しのコードです。詳細は下記の記事も参照して下さい

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[Read]または[Write]ボタンをクリックしてファイルを読み込み、書き出しをします。
StreamReader または StreamWriter オブジェクトの作成処理で、下図のSystem.ArgumentException例外が発生します。

原因

.NET Core では Shift-JISのエンコーディングを処理するプロバイダがデフォルトでは登録されていないためです。

対処法

Shift-JISのエンコーディングを処理するプロバイダを登録するとShift-JISのファイルを読み込み、書き出しできるようになります。
具体的な手順やコードはこちらの記事を参照して下さい。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2020-06-08
作成日: 2020-06-08
iPentec all rights reserverd.