.NET Frameworkでは問題なく扱えるが,
.NET Coreの場合はひと手間加えてやらないとShift JISが扱えない。
ひと手間加えないとどうなるか
using (var reader = new StreamReader(file, System.Text.Encoding.GetEncoding("Shift_JIS"))) { // ... }
このコードだと,ビルドは通るが,実行時に以下のような例外が発生する。
ArgumentException: 'shift_jis' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.
対策
Encoding.RegisterProviderをShift JISを扱う前にコールすることで,Windowsのシステムが提供するエンコーディングの全てを利用できるようになる。
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); // memo: Shift-JISを扱うためのおまじない using (var reader = new StreamReader(file, System.Text.Encoding.GetEncoding("Shift_JIS"))) { // ... }
それではまた。
written by @mogmo1012