У меня есть куча символы юникода от U1F000 и выше, и мне интересно, как их представить на Java. Экранирование Юникода Java имеет форму «\ uXXXX», а в спецификации языка Java сказано, что «Для представления дополнительных символов требуется два последовательных экранирования Юникода». Как это применимо к U1F000?
String mahjongTile = "\u0001\uf000";
Не работает казаться (я получаю только два пустых квадрата), но я полагаю, что это может быть сбой шрифта.




Вам нужно будет разработать соответствующую суррогатную пару, если вы хотите, чтобы она была в строковом литерале. (В C# вы можете написать «\ U0001f000» - \ u используется для BMP, а \ U - для полного Unicode.)
В Java вы могли:
String foo = new String(new int[]{0x1f000}, 0, 1);
если вы хотите по-прежнему видеть его "1f000". Признаюсь, я не могу вспомнить суррогатные диапазоны высоких / низких значений наверху моей головы :(
Хм. Я все еще получаю два пустых квадрата. Полагаю, мне понадобится специальный шрифт, чтобы плитки Маджонга отображались правильно.
В каком шрифте вы пытаетесь их отобразить и в каком элементе управления пользовательского интерфейса?
Ответ Джона должен работать, но вы также можете использовать метод appendCodePoint в StringBuilder или StringBuffer.
StringBuilder sb = new StringBuilder();
sb.appendCodePoint(0x1f000);
Оба метода выполняют преобразование в суррогатные пары за вас.
Похоже, теперь ваша проблема заключается в том, чтобы символы отображались правильно. Если вы пытаетесь отобразить их на консоли, забудьте об этом; консоль на большинстве машин слишком ограничена. Я предлагаю вам либо записать результат в файл и использовать хороший текстовый редактор для его чтения, либо отобразить результат в компоненте Swing, таком как JTextPane.
Я думаю, что в настоящее время я вывожу его в представление списка SWT (я использую скелет кода, созданный Eclipse, и у меня нет кода для проверки).
Очевидно, у вас должен быть шрифт, поддерживающий глифы, которые вам нужно отобразить. Здесь может помочь такой инструмент, как BabelMap.