Я пишу игру, используя библиотеку curses. Я пытаюсь отобразить нестандартные символы Юникода, и тут возникла проблема.
Скажем, я хочу отобразить символ дерева Unicode. Быстрый гугл отображает что-то вроде этого:
«?» (U + 1F332)
Однако, когда я пытаюсь отобразить это в своем терминале Python, CMD или используя curses в окне curses, все, что я получаю, это:
In: u'\u1F332'
Out: 'ἳ2'
Это потому, что шрифт, который я использую, не поддерживает этот конкретный символ? Есть ли способ добавить дополнительные символы Unicode в библиотеку curses?
Управляющая последовательность \u
интерпретирует следующие четыре символа (в вашем случае 1F33
) как 16-битное шестнадцатеричное выражение, что вам не нужно. Поскольку ваша кодовая точка не умещается в 16 битах, вам понадобится escape-последовательность \U
и предоставьте 32-битное (восемь символов) шестнадцатеричное выражение.
In [1]: '\U0001F332'
Out[1]: '?'
(Я предполагаю из вашего вывода, что вы используете python 3.)
У вас также могут быть проблемы с кодировкой и шрифтом вашего терминала, но ваш текущий код не позволяет вам даже добраться до этой точки.
Тонкий. Спасибо, я бы никогда не догадалась сама. Вышеупомянутое работает, хотя реальный персонаж выглядит немного иначе; Я предполагаю, что это связано с моими настройками шрифта / дисплея. Я поиграю с ним и сообщу о своих выводах. Кроме того, он отображается только в моей среде разработки Python; curses отображает только знак вопроса по умолчанию - это тоже связано с curses из-за ограничений шрифта? Есть ли способ добавить в проклятия нужный символ?
Кстати, я использую один и тот же шрифт для CMD и Spyder (Consolas).
@Piotr Я думаю, что это ограничение Windows cmd, но это трудно сказать без минимальный воспроизводимый пример и подробностей о вашей ОС и среде (и у меня нет окна Windows под рукой). Я обнаружил, что ответ в суперпользователе SO предполагает, что cmd не может отображать такой символ, но вы можете использовать другую консоль, например conemu.
Возможно, вы пропустили вызов
setlocale
(например, см. это).