人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: ガー!
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● SHARUL

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

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

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

◎質問者からの返答

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

(Windows-31Jではなく)Shift_JIS

(Windows-31Jではない)Shift_JIS


2 ● a-kuma3

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 を使ってもらうしか

無いような気がします。


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

◎質問者からの返答

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となることを期待
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ