#navi_header|技術| Shift_JIS, MS932, Windows-31J の取り扱いについて実験する。 これらは特にサーバーサイドのJavaを扱う上で何かと文字化けの原因として取りざたされている。今回示す例では、日本語の自然文で普通に使用される '' ~ '' が簡単に文字化けしてしまっている。 * "~"の混じったJavaソースを用意する。 public class EncodingW31 { public static void main(String[] args) { System.out.println("Windows-31J ~・㈱"); } } * コンパイルし、実行してみる。 ** ケース1:Shift_JISとしてコンパイル・実行 &image(87) 上図に示すとおり、見事に文字化けしている。下はclassファイルをUTF-8対応のエディタで文字コード自動認識で開いた図。 &image(88) ** ケース2:MS932、あるいはWindows-31Jとしてコンパイル・実行 &image(89) 上図の通り、文字化けせずに表示できた。なお、エディタで開いてみると先と同じく、自動認識ではSJISと判定されてしまった。 なお、こちらの例では"MS932"としていしてコンパイルしたが、 '' "Windows-31J"を指定しても同じクラスファイルが生成された。 '' (MD5チェックサムが同一) * 結論 サーバーサイドで入力される文字コードがSJISが想定された場合は、"Shift_JIS"で受け取るのではなく"Windows-31J"あるいは"MS932"として受け取るべきである。 * 参考(Windows-31JとJava関連) - http://www.atmarkit.co.jp/fjava/rensai3/mojibake01/mojibake01.html - http://www.javaroad.jp/servletjsp/sj_servlet13.htm - http://www.ingrid.org/java/jserv/i18n/corruptedchar.html - http://www2d.biglobe.ne.jp/~msyk/charcode/cp932/Windows-31J-charset.html #navi_footer|技術|