Visual Studio、Shift-JISが使えない・・・。

C#

マイクロソフトのドキュメントにあったように、

Using System.Text;
Encoding e = Encoding.GetEncoding("shift_jis");

とやったら、

”shift⁠-⁠jis’ is not a supported encoding name.

とエラーを吐かれました。

// 932     shift_jis       日本語 (シフト JIS)
// 10001   x-mac-japanese  日本語 (Mac)
// 20290   IBM290  IBM EBCDIC (日本語カタカナ)
// 20932   EUC-JP  日本語 (JIS 0208-1990 および 0212-1990)
// 50220   iso-2022-jp     日本語 (JIS)
// 50221   csISO2022JP     日本語 (JIS 1 バイト カタカナ可)
// 50222   iso-2022-jp     日本語 (JIS 1 バイト カタカナ可 – SO/SI)
// 51932   euc-jp  日本語 (EUC)

何度見ても、shift_jisでアンダーバーで小文字です。

意味不明な情報がたくさん

“shift_jis”を書いても、数字にして932にしても通らず。ほかのサイトを見て大文字を混ぜてみたりハイフンにしても通りません。

  • Shift-JIS
  • shift-jis
  • Shift_JIS

どれもダメでした。

.NET Coreでは未定義

行きついたのは、定義しなおす関数でした。

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

これを入れればよいみたい。意味不明・・・。こんなのが多いのが大変なところです。Shift-JISコードなんて使いたくないですが、仕方ないです。

なかなかうまくいかない・・・。

「ソリューションのNuGetパッケージの管理」ツールをインストールして、「System.Text.Encoding.CodePages」をインストールしました。

今度は「オブジェクト参照がオブジェクトインスタンスに設定されていません」エラーが・・・。⇒ 再起動したら治りました。

うまくいった

using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleAppHL7
{
    class Program
    {
        static void Main(string[] args)
        {
           Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
           Task<string> strMsg = File.ReadAllTextAsync(@"C:\filepath.txt", Encoding.GetEncoding("Shift_JIS"));
           Console.Write(strMsg.Result);
        }
    }
}

読み込みできました。最後に、Windowsのメモ帳アプリではShift-JISが標準でなくなりUTF-8に代わっています。

今回必要なファイルは、Shift-JISコード、改行<CR>だったので、久しぶりにTerapadをインストールして作成しました。

コメント

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