Как поместить дополнительный символ Unicode в строковый литерал? - PullRequest
17 голосов
/ 09 ноября 2011

Как поместить дополнительный символ Unicode (скажем, кодовую точку 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), и вместо ожидаемого символа я вижу квадрат (моя консоль не поддерживала юникод должным образом).

Ответы [ 2 ]

14 голосов
/ 09 ноября 2011

«У меня работает», в чем конкретно проблема?

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. Вот вам и поддержка Unicode:)

Удачного кодирования.

5 голосов
/ 09 ноября 2011

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

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

Но вывод:

text = ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...