home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Java/文字コードメモ1 (v1)

Java/文字コードメモ1 (v1)

Java / 文字コードメモ1 (v1)
id: 86 所有者: msakamoto-sf    作成日: 2006-03-14 13:36:24
カテゴリ: Java 

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

画像/Java/java_charactercode_1_sjis.jpg

  • EncodingEUC.class

画像/Java/java_charactercode_1_euc.jpg

いずれも、文字コードがUTF-8としてエディタに認識され*1、実際に日本語文字列が読み込めている。

推察と追試験

以上より、 -encoding オプションをコンパイル時に指定することによりプラットフォームのデフォルトでない文字コードでも、クラスファイルコンパイル時にUTF-8に変換されて内部表現されることが分かった。

では、あえて-encodingで間違ったエンコーディングを指示するとどうなるか?
画像/Java/java_charactercode_1_plus.jpg

上図のように、コンパイル時に文字コードの検出で警告が表示されるが、クラスファイルは生成される。また、実行すると文字化けしていることが分かる。

実際にクラスファイルをエディタで開いてみると、下図のようになり、エディタの文字コードの自動認識も失敗していることが分かる。
画像/Java/java_charactercode_1_plus2.jpg

結論

  1. "-encoding" オプションによりソースコードの文字コードを明示してコンパイルできる。
  2. コンパイル時にUTF-8の内部表現に変換される。
  3. "-encoding" オプションで間違ったエンコーディングを指定した場合、文字コードで警告が出るがクラスファイルは生成される。ただし、内部表現では文字化けが発生する。

どうでもいいですが、文字コードとエンコーディングをもうちょっと意識して使い分けたいです。勉強しなくちゃ・・・。


*1: エディタ画面右下部分参照

プレーンテキスト形式でダウンロード
表示中のバージョン : 1
現在のバージョン : 3
更新者: msakamoto-sf
更新日: 2015-02-08 00:11:03
md5:1271b29f54c76dfa7b0ca49f6aacabbb
sha1:3bf18cdfc1eccedcb77b7c57bf3e1f093d2889ad
コメント
コメントを投稿するにはログインして下さい。