Итак, "char" в Java - 2 байта. (Можно проверить здесь.)
У меня есть этот пример кода:
public class FooBar {
public static void main(String[] args) {
String foo = "€";
System.out.println(foo.getBytes().length);
final char[] chars = foo.toCharArray();
System.out.println(chars[0]);
}
}
И вывод выглядит следующим образом:
3
€
Мой вопрос в том, как Java соответствовала 3-байтовому символу в тип данных char? BTW, я запускаю приложение с параметром: -Dfile.encoding = UTF-8
Также, если я немного отредактирую код и добавлю следующие утверждения:
File baz = new File("baz.txt");
final DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(baz));
dataOutputStream.writeChar(chars[0]);
dataOutputStream.flush();
dataOutputStream.close();
окончательный файл "baz.txt" будет всего 2 байта, и он не будет показывать правильный символ, даже если я рассматриваю его как файл UTF-8.
Изменить 2: Если я открою файл "baz.txt" с кодировкой UTF-16 BE, я увижу, что символ "очень хорошо" в текстовом редакторе, что имеет смысл, я думаю.