Как добавить символ 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 = ?