次のプログラムを検討してください。
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
public class HelloWorld {
public static void main(String[] args) {
System.out.println(Charset.defaultCharset());
char[] array = new char[3];
array[0] = '\u0905';
array[1] = '\u0905';
array[2] = '\u0905';
CharBuffer charBuffer = CharBuffer.wrap(array);
Charset utf8 = Charset.forName("UTF-8");
ByteBuffer encoded = utf8.encode(charBuffer);
System.out.println(new String(encoded.array()));
}
}
これをターミナルで実行すると、
java HelloWorld
適切にエンコードされ、整形されたテキストが得られます。デフォルトのエンコーディングはMacRoman
.
Eclipse から同じコードを実行すると、間違ったテキストがコンソールに出力されます。
Eclipse のファイル エンコーディング オプションを に変更すると、EclipseUTF-8
で正しい結果が出力されます。
なぜこれが起こるのだろうか?ここでは明示的に UTF-8 を使用しているため、理想的には、ファイル エンコーディング オプションがこのコードに影響を与えるべきではありません。
なぜこれが起こっているのですか?
Java 1.6 (Sun JDK)、Mac OSx 10.7 を使用しています。