#navi_header|技術| Javaソースコード中に埋め込まれた文字列が、実際にコンパイルされると内部で本当にUTF-8になるのか確認してみる。 '' プラットフォームはWindowsXP + JDK 1.5 '' * SJISで記述→コンパイル EncodingSJIS.java: public class EncodingSJIS { public static void main(String[] args) { System.out.println("ShiftJISの日本語表示文字列です。"); } } DOS> javac -encoding Shift_JIS EncodingSJIS.java DOS> java -cp . EncodingSJIS ShiftJISの日本語表示文字列です。 * EUC-JPで記述→コンパイル public class EncodingEUC { public static void main(String[] args) { System.out.println("EUC-JPの日本語表示文字列です。"); } } DOS> javac -encoding EUC-JP EncodingEUC.java DOS> java -cp . EncodingEUC EUC-JPの日本語表示文字列です。 * クラスファイルの内部を見てみる。 拡張子を.txtにして(しなくとも良いが)、UTF-8に対応したエディタで文字コードをUTF-8で指定して開いてみる。 - EncodingSJIS.class &image(85) - EncodingEUC.class &image(82) いずれも、文字コードがUTF-8としてエディタに認識され((エディタ画面右下部分参照))、実際に日本語文字列が読み込めている。 * 推察と追試験 以上より、 '' -encoding '' オプションをコンパイル時に指定することによりプラットフォームのデフォルトでない文字コードでも、クラスファイルコンパイル時にUTF-8に変換されて内部表現されることが分かった。 '' では、あえて-encodingで間違ったエンコーディングを指示するとどうなるか? '' &image(84) 上図のように、コンパイル時に文字コードの検出で警告が表示されるが、クラスファイルは生成される。また、実行すると文字化けしていることが分かる。 実際にクラスファイルをエディタで開いてみると、下図のようになり、エディタの文字コードの自動認識も失敗していることが分かる。 &image(83) * 結論 + "-encoding" オプションによりソースコードの文字コードを明示してコンパイルできる。 + コンパイル時にUTF-8の内部表現に変換される。 + "-encoding" オプションで間違ったエンコーディングを指定した場合、文字コードで警告が出るがクラスファイルは生成される。ただし、内部表現では文字化けが発生する。 どうでもいいですが、文字コードとエンコーディングをもうちょっと意識して使い分けたいです。勉強しなくちゃ・・・。 #navi_footer|技術|