Как добавить символ Unicode в строковый литерал?

Как добавить дополнительный символ Unicode (например, codepoint 10400) в строковый литерал? Я попытался поставить суррогатную пару следующим образом:

String text = "TEST \uD801\uDC00";
System.out.println(text);

но он не работает.

UPDATE:

Хорошей новостью является то, что строка построена правильно.
Байт-массив в UTF-8: 54 45 53 54 20 f0 90 90 80
Байт-массив в UTF-16: fe ff 0 54 0 45 0 53 0 54 0 20 d8 1 dc 0

Но плохая новость заключается в том, что она не печатается должным образом (в моем блоке Fedora), и я вижу квадрат вместо ожидаемого символа (моя консоль не поддерживала юникод правильно).

Ответы

Ответ 1

"Работает для меня", в чем именно проблема?

public static void main (String[] args) throws Exception {
    int cp = 0x10400;
    String text = "test \uD801\uDC00";
    System.out.println("cp:    " + cp);
    System.out.println("found: " + text.codePointAt(5));
    System.out.println("len:   " + text.length());
}

Вывод:

cp:    66560
found: 66560
len:   7

Обратите внимание, что длина - как и большинство методов String - имеет дело с char s, а не с символами Unicode. Так много для awesome поддержки Unicode:)

Счастливое кодирование.

Ответ 2

Предполагается работать с использованием:

System.out.println(
    "text = " + new String(Character.toChars(h))
);

Но выход:

text = ?