.NETでShift-JISが使えなくて困ってませんか?今日はそんなあなたのために、C#とVB.NETでShift-JISを使えるようにする方法を分かりやすくお届けします!
「なんで使えないの?」「解決策はあるの?」とモヤモヤしているあなた、この記事を読めばスッキリするはず。というわけで、今回は 「Shift-JISが使えない!?」問題と、その 超シンプルな解決法について紹介します。
よくあるエラー:Shift-JISはサポートされていません
.NET Core や .NET 5 以降のアプリケーションで、こんなエラーに出くわしたことはありませんか?
System.ArgumentException: 'Shift-JIS' is not a supported encoding name.
うん、見たことある気がしますよね…。
このエラー、ざっくり言うと「その文字コード、今の.NETじゃ標準じゃないよ!」というメッセージなんです。
え、Shift-JISって使えないの?
「え!?Shift-JISって日本語の基本じゃないの?」と思った方、鋭いです。でも残念ながら、.NET Coreや.NET 5以降では軽量化のために、Shift-JISのような“レガシーな文字コード”がデフォルトでは使えなくなってるんです。
その代わり、UTF-8が推されています。
とはいえ、業務アプリやレガシーデータ、CSVファイルとのやり取りではまだまだShift-JISが現役だったりしますよね。特にWindowsの世界では根強い存在です。
解決策:CodePagesEncodingProviderを使おう!
そんなときに登場するのが、救世主的な存在CodePagesEncodingProvider
です!
これを使えば、Shift-JISどころかEUC-JPやISO-2022-JPなども使えるようになります。やったね!
C#での設定方法
では、まずC#から。以下のコードを見てください👇
using System; using System.Text; class Program { static void Main(string[] args) { // Shift-JISを有効にする設定 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // Shift-JISエンコーディングを取得 Encoding sjis = Encoding.GetEncoding("Shift-JIS"); Console.WriteLine(sjis.EncodingName); } }
この Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
の一文が大事です。ここを忘れると、また例の「サポートされてません!」エラーが飛んできます。
VB.NETでの設定方法
もちろんVB.NET派のあなたにも安心していただけるように、VB版もご用意しました!
Imports System.Text Module Program Sub Main() ' Shift-JISを使うための設定 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) ' Shift-JISエンコーディングを取得 Dim sjis As Encoding = Encoding.GetEncoding("Shift-JIS") Console.WriteLine(sjis.EncodingName) End Sub End Module
こちらも同じく RegisterProvider
を最初に呼んであげるのがポイントです。
補足:なぜそもそも使えないの?
ここで「そもそもなんでShift-JISが外されたの?」という疑問にも触れておきますね。
それはズバリ、.NET Core 以降の思想が“軽量でモダン”だからです。
- レガシーなエンコーディングは使用頻度が低い
- 全世界での利用を考えるとUTF-8で統一したい
- 少しでも無駄なリソースを減らしたい
といった理由で、Shift-JISなどの「昔ながらの文字コード」は標準から外れたんです。ちょっと寂しい話ですが、時代の流れというやつですね。
よくある質問(FAQ)
Q1. 他のエンコーディングも使えますか?
はい、使えます!CodePagesEncodingProvider
を登録すれば、以下のようなエンコーディングも有効になります:
- EUC-JP
- ISO-2022-JP
- Windows-1252(欧州系)
- などなど…
地味に便利です。
Q2. どの.NETバージョンで使えるの?
この方法が使えるのは以下のバージョンです:
- .NET Core 3.0 以降
- .NET 5, .NET 6, .NET 7, .NET 8…
- .NET 6 のLTS(長期サポート)でももちろんOK
ちなみに .NET Framework(4.8以前)では設定不要 なので混乱しないでくださいね。
Q3. 毎回登録する必要がありますか?
はい、基本的にはアプリの「最初のほう」で一度だけ RegisterProvider
を呼べばOKです。
Webアプリなら Startup.cs
や Program.cs
の最初で呼びましょう。 デスクトップアプリなら Main()
で呼んでおけば安心です。
応用:文字列のエンコードとデコード
せっかくなので、Shift-JISを使った文字列のエンコード例もご紹介します👇
C#版
string text = "こんにちは"; byte[] bytes = Encoding.GetEncoding("Shift-JIS").GetBytes(text); string decoded = Encoding.GetEncoding("Shift-JIS").GetString(bytes); Console.WriteLine(decoded); // こんにちは
VB.NET版
Dim text As String = "こんにちは" Dim bytes As Byte() = Encoding.GetEncoding("Shift-JIS").GetBytes(text) Dim decoded As String = Encoding.GetEncoding("Shift-JIS").GetString(bytes) Console.WriteLine(decoded) ' こんにちは
Shift-JISが扱えるようになると、レガシーなCSV出力などにも安心して対応できます!
というわけで、まとめ!
- .NET Coreや.NET 5以降では、Shift-JISはデフォルトで使えません。
- でも大丈夫!
CodePagesEncodingProvider
を使えばすぐに有効化できます。 - C#でもVB.NETでも、設定方法はとってもシンプル!
- UTF-8で統一できれば理想だけど、現実はそんなに甘くない…という時のために覚えておくと吉。
Shift-JISのサポートで困っていた方は、ぜひこの方法を試してみてくださいね。
それでは今回はここまで。
読んでいただきありがとうございました!また次回の.NETお役立ち情報でお会いしましょう〜!