マイクロソフトのドキュメントにあったように、
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をインストールして作成しました。
コメント