Код должен быть скомпилирован с правильной кодировкой:
javac -encoding UTF-8 Foo.java
Там будет где-то несоответствие кодировки.
public class Foo {
char [] a = {'à', 'á', 'â', 'ä' };
}
Приведенный выше код, сохраненный как UTF-8, должен стать шестнадцатеричным дампом:
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 }____
Значение UTF-8 для кодовой точки U + 00E0 (& # xE0;) равно C3 A0
.
Код должен быть скомпилирован с правильной кодировкой:
javac -encoding UTF-8 Foo.java
Существует вероятность того, что & # x61; & # x300; будет представлен последовательностью объединения U + 0061 U + 0300. Это форма NFD (я никогда не сталкивался с текстовым редактором, который использовал его по умолчанию для ввода текста). Как указывает Турбьёрн Равн Андерсен , часто лучше всегда использовать escape-последовательности \ uXXXX - это менее двусмысленно.
Вам также необходимо проверить ваше устройство ввода (файл / консоль / и т. Д.)
В крайнем случае, вы можете сбросить свои char
s в шестнадцатеричном формате System.out.format("%04x", (int) c);
и попробовать вручную расшифровать их с помощью инспектора символов , чтобы выяснить, что они из себя представляют.