コードは正しいエンコーディングでコンパイルする必要があります。
javac -encoding UTF-8 Foo.java
どこかにエンコーディングの不一致があります。
public class Foo {
char [] a = {'à', 'á', 'â', 'ä' };
}
UTF-8 として保存された上記のコードは、16 進ダンプになります。
70 75 62 6C 69 63 20 63 6C 61 73 73 20 46 6F 6F public class Foo
20 7B 0D 0A 20 20 63 68 61 72 20 5B 5D 20 61 20 {__ char [] a
3D 20 7B 27 C3 A0 27 2C 20 27 C3 A1 27 2C 20 27 = {'__', '__', '
C3 A2 27 2C 20 27 C3 A4 27 20 7D 3B 20 20 0D 0A __', '__' }; __
7D 0D 0A 0D 0A }____
コード ポイント U+00E0 (à) の UTF-8 値は ですC3 A0
。
コードは正しいエンコーディングでコンパイルする必要があります。
javac -encoding UTF-8 Foo.java
à が組み合わせシーケンス U+0061 U+0300 で表される外部の可能性があります。これがNFDフォームです (これをテキスト入力のデフォルトとして使用するテキスト エディターに出会ったことはありません)。Thorbjørn Ravn Andersen が指摘しているように、多くの場合、常に \uXXXX エスケープ シーケンスを使用する方が適切です。
また、入力デバイス (ファイル/コンソール/など) を確認する必要があります。
最後の手段として、char
s を 16 進数としてダンプし、文字インスペクターSystem.out.format("%04x", (int) c);
を使用して手動でデコードして、それらが何であるかを調べることができます。