.NET FrameworkでShift_JISは使えない?

C#.NETで、(Windows-31Jではなく)Shift_JISでエンコードされた文字列を処理したいのですが、.NET Frameworkでサポートしているエンコーディング一覧の中に(Windows-31Jではない)Shift_JISが無いようです。(Encodingクラスの解説で確認)
.NET FrameworkではShift_JISを使えないのでしょうか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/09/18 14:30:07

回答2件)

id:SHARUL No.1

回答回数40ベストアンサー獲得回数3

使える・使えないの定義がわかりませんが、Shift_JISを表すEncodingクラスの派生クラスインスタンスは以下で取得できます。

Encoding e = Encoding.GetEncoding("Shift_JIS");

これを文字列処理のメソッドに対して受け渡すことで、例えばShift_JISで保存されたテキストファイルの文字列を読み取ることなどは問題なくできるはずです。

id:miscellaneousness

大事なことなので2度言いました。

(Windows-31Jではなく)Shift_JIS

(Windows-31Jではない)Shift_JIS

2011/09/11 15:29:08
id:a-kuma3 No.2

回答回数4974ベストアンサー獲得回数2154

Encoding クラスの解説というのは、↓みたいなやつですよね。

http://msdn.microsoft.com/ja-jp/library/system.text.encoding%28v=vs.80%29.aspx


http://msdn.microsoft.com/en-us/library/dd317756%28v=vs.85%29.aspx

↑のページだと、.NET Name がつけられてないのも載ってますが、IANA で言うところの Shift_JIS に相当するコードページがありません。


Windows の API だと、I18N の実装は、IANA の charcter sets で定められている character set ではなく、

code page をベースにしているので、該当する CP が無い以上、使えないでしょうね。


「どんなときに困るかなあ」と想像しながら書いてたんですけど、

Windows 以外のシステムにデータを渡すときに困る、という話でしょうか?

選択の余地があるなら、Unicode 系を使うか、相手に Windows-31J を使ってもらうしか

無いような気がします。


# あまり、答えになって無くてごめんなさい

id:miscellaneousness

Encoding クラスの解説というのは、↓みたいなやつですよね。

それです。

どんなときに困るかなあ

具体的には、以下のようにデコード時にShift_JISとして不正なコードは特別な処理をしようとしています。

文字コードは既に仕様でShift_JISと決まっているので、今更変えられないんですよね…。(今時そんなもの使うなよと思いますが)

Encoding shiftJIS = Encoding.GetEncoding("(Windows-31Jではない)Shift_JIS",
    new EncoderReplacementFallback("?"),
    new DecoderReplacementFallback("\uFFFD"));
byte[] bytes = { 0x87, 0x40 }; // '①'
char[] chars = shiftJIS.GetChars(bytes);
// ↑U+2460ではなくU+FFFDとなることを期待
2011/09/11 16:36:54
  • id:SHARUL
    的外れでしたね。すみません…
  • id:a-kuma3
    >文字コードは既に仕様でShift_JISと決まっているので、今更変えられないんですよね…。
    じゃなければ、こんな質問を立てないですよね。

    んー、自分だったらどうするかなあ。
    とりあえず、Microsoft 純正の API では、どうにもならないと思うので、
    フリーを含めたサードパーティ品か、別の言語のライブラリと組み合わせる(外部プロセス経由)か、でしょうか。
  • id:miscellaneousness
    > フリーを含めたサードパーティ品か、別の言語のライブラリと組み合わせる(外部プロセス経由)か

    Windows Presentation FoundationでGUIを作りたかったので、データ処理もC#.NETで書こうかと考えたんですが、無理ですかね。
    IronRuby + WPFでVisual C#みたいに簡単にGUIアプリケーションを作れるなら、IronRubyで書こうかなぁ…どうなんだろIronRuby + WPFって。


  • id:a-kuma3
    >データ処理もC#.NETで書こうかと考えたんですが、無理ですかね。
    自分でもあたりそうなケースなので、.NET で普通の文字コード変換ができる方法を
    調べてみようとは思いますが、回答はあまり期待しないでください。

    言語は何でも良いけど、クライアントのアプリで、ということだったら
    ぼくなら、java を選択してるかな、という気がします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません