В модуле curses.ascii определены несколько хороших функций, которые позволяют, например, распознавать, какие символы можно распечатать (curses.ascii.isprint(ch)).
Но разные коды символов могут быть распечатаны в зависимости от того, какой языковой стандарт используется. Например, есть некоторые польские символы:
>>> ord('a')
97
>>> ord('ą')
177
>>>
Мне интересно, есть ли лучший способ определить, представляет ли число печатаемый символ, чем тот, который используется в модуле curses.ascii:
def isprint(c): return _ctoi(c) >= 32 and _ctoi(c) <= 126
что отчасти недружелюбно к региону.






Если вы конвертируете символ в Unicode, вы можете использовать unicodedata:
>>> unicodedata.category(u'ą')[0] in 'LNPS'
True
Ну, он называется curses.ascii, поэтому использование правил ASCII для печати не должно быть сюрпризом. Если вы используете 8-битный код ISO или работаете с известной кодовой страницей, вам потребуются правила, которые соответствуют фактическим кодам и их отображению.
Я думаю, что использование символов Юникода и стандартных классификаций Юникода - это нормально. Это может не иметь отношения к тому, что проклятия и расположение консоли на самом деле будут отображаться должным образом.
Также необходимо учитывать, что является приемлемым и неприемлемым для приложения, даже если оно отображается.