だから私はこの簡単なコードを持っています:
public class FooBar {
public static void main(String[] args) {
String foo = "ğ";
System.out.println(foo.getBytes().length);
}
}
そして、それをコンパイルして実行しましょう:
$ javac FooBar.java
$ java -Dfile.encoding=UTF-32 FooBar
4
プログラムの実行時に Java に UTF-32 エンコーディングを使用するように指示したため、1 つの文字が String で 4 byes かかることに驚きはありません。
UTF-8エンコーディングでプログラムを実行してみましょう:
$ java -Dfile.encoding=UTF-8 FooBar
2
すべて問題ないようです。
現在、クラス ファイル (FooBar.class) は451 バイトです。次のようにコードを変更します。
public class FooBar {
public static void main(String[] args) {
String foo = "ğğ";
System.out.println(foo.getBytes().length);
}
}
もう一度コンパイルして、ディスク内のファイルの長さが453 バイトであることを確認します。
明らかに、ファイル自体は UTF-8 エンコーディングでディスクに保存されます。この .class ファイルを UTF-32 エンコーディングで実行すると、次のようになります。
$ java -Dfile.encoding=UTF-32 FooBar
8
すべて問題ないようですが、文字列文字に UTF-32 を使用して .class ファイルをエンコードするようにコンパイラに指示する方法はありますか?