Отображение расширенных символов Unicode в Python curses

Я пишу игру, используя библиотеку curses. Я пытаюсь отобразить нестандартные символы Юникода, и тут возникла проблема.

Скажем, я хочу отобразить символ дерева Unicode. Быстрый гугл отображает что-то вроде этого:

«?» (U + 1F332)

Однако, когда я пытаюсь отобразить это в своем терминале Python, CMD или используя curses в окне curses, все, что я получаю, это:

In: u'\u1F332'
Out: 'ἳ2' 

Это потому, что шрифт, который я использую, не поддерживает этот конкретный символ? Есть ли способ добавить дополнительные символы Unicode в библиотеку curses?

Возможно, вы пропустили вызов setlocale (например, см. это).

Thomas Dickey 28.10.2018 18:53
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
860
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Управляющая последовательность \u интерпретирует следующие четыре символа (в вашем случае 1F33) как 16-битное шестнадцатеричное выражение, что вам не нужно. Поскольку ваша кодовая точка не умещается в 16 битах, вам понадобится escape-последовательность \U и предоставьте 32-битное (восемь символов) шестнадцатеричное выражение.

In [1]: '\U0001F332'                                                            
Out[1]: '?'

(Я предполагаю из вашего вывода, что вы используете python 3.)

У вас также могут быть проблемы с кодировкой и шрифтом вашего терминала, но ваш текущий код не позволяет вам даже добраться до этой точки.

Тонкий. Спасибо, я бы никогда не догадалась сама. Вышеупомянутое работает, хотя реальный персонаж выглядит немного иначе; Я предполагаю, что это связано с моими настройками шрифта / дисплея. Я поиграю с ним и сообщу о своих выводах. Кроме того, он отображается только в моей среде разработки Python; curses отображает только знак вопроса по умолчанию - это тоже связано с curses из-за ограничений шрифта? Есть ли способ добавить в проклятия нужный символ?

Piotr 28.10.2018 20:05

Кстати, я использую один и тот же шрифт для CMD и Spyder (Consolas).

Piotr 28.10.2018 20:13

@Piotr Я думаю, что это ограничение Windows cmd, но это трудно сказать без минимальный воспроизводимый пример и подробностей о вашей ОС и среде (и у меня нет окна Windows под рукой). Я обнаружил, что ответ в суперпользователе SO предполагает, что cmd не может отображать такой символ, но вы можете использовать другую консоль, например conemu.

Stop harming Monica 29.10.2018 00:25

Другие вопросы по теме