エンコーディング

Javaにおける"Shift_JIS"

エンコーディングと聞くと、面倒な記憶がある人が多いだろう。特にJavaでの"Shift_JIS"は、いろいろと厄介で、いろいろ指定してみた結果で、まあ一応ちゃんと表示できたからいいや、というパターンが結構あるのでは?

この"Shift_JIS"、実はJ2SEのバージョンで対応する(エイリアスというらしい)コンバータが違うのだ。

現在(2004年2月)標準と思われる1.4.2では、"Shift_JIS"はSJIS用のコンバータにエイリアスされている。ところがそうなったのは1.4.1からで、それまではMS932用のコンバータにエイリアスされていたのだ。さらにややこしいことに、MS932になったのも1.1.8以降で、それまではやはりSJISだった。

"Shift_JIS" "SJIS" "Windows-31J" "MS932"

IANA登録名称対応コンバータ(最初)(1.1.8 - 1.4.0)(1.4.1 - )
Shift_JISSJISMS932SJIS
Windows-31J(調査不足により不明)MS932MS932

つーかそもそもいろいろな名前がでてきてわからん、という意見もあると思うので、俺なりに整理してみたのが右の表。こうして整理すればそんなには難しくないと思うんだが。

「本当は"Shift_JIS"は"SJIS"コンバータにエイリアスするのが正しい(1.1.8以前の話)。でも、世の中的に"Shift_JIS"といいながらも"MS932"コンバータでないと駄目なことが多かったのでそっちにした(1.4.0までの話)。」ということのようだ。で、「でも最近はxmlとかで"正式な"名前を使うべきという流れが主流になってきたので、おおごとになる前に正しい姿に戻しましょう(1.4.1以降の話)。」ということだそうな。

今後の方針

で、結局どうすりゃいいの?という話だが、まず、(今回説明している範囲で言えば)指定するのは"Shift_JIS"か"Windows-31J"ということ。"SJIS"とかを直接指定しても多分動くんだが、「礼儀正しくない」という認識。俺がね。(多分世の中的にも)

その上で、web系のシステムとか作る時は"Shift_JIS"だろ、という感じか。"Windows-31J"を指定するということは、クライアントとしてWindows環境を前提(は言い過ぎかもしれんが)としているわけで、それは違うのでは、となる。もちろんこういう問題って一概に言えないところが多くて、俺のように極論するタイプは言い過ぎることが多いので、話半分に聞いとくように。

とりあえずすぐに重要なこととして、Windows環境で、実行環境を1.4.1以降に変えたら文字化けするようになった、という場合は、"Shift_JIS"を指定しているところを"Windows-31J"にしてみよう。直る可能性が高い。

参考

http://www.ingrid.org/java/i18n/encoding/shift_jis.html

更新履歴

2004/2/26: 新規作成

Java メニュー

トップページ

Valid XHTML 1.1! (2004/2/26)