python curses.ascii a seconda delle impostazioni locali?
Domanda
Il modulo curses.ascii
ha alcune belle funzioni definite, che consentono ad esempio di riconoscere quali caratteri sono stampabili ( curses.ascii.isprint (ch)
).
Tuttavia, codici di caratteri diversi possono essere stampabili a seconda dell'impostazione della locale utilizzata. Ad esempio, ci sono alcuni caratteri polacchi:
>>> ord('a')
97
>>> ord('ą')
177
>>>
Mi chiedo, c'è un modo migliore per dire se un numero rappresenta un carattere stampabile rispetto a quello usato nel modulo curses.ascii
:
def isprint(c): return _ctoi(c) >= 32 and _ctoi(c) <= 126
che è una specie di locale ostile.
Soluzione
Se converti il ??personaggio in un unicode, puoi usare unicodedata:
>>> unicodedata.category(u'ą')[0] in 'LNPS'
True
Altri suggerimenti
Beh, si chiama curses.ascii, quindi usare le regole ASCII per ciò che è stampabile non dovrebbe essere una sorpresa. Se stai usando un codice ISO a 8 bit o stai operando da una tabella codici conosciuta, avrai bisogno di regole che corrispondano a quali sono i codici effettivi e i loro display.
Penso che usare caratteri Unicode e classificazioni Unicode standard vada bene. Questo potrebbe non riguardare ciò che le maledizioni e la disposizione della console verranno effettivamente visualizzate correttamente.
È necessario considerare anche ciò che è accettabile e inaccettabile per l'applicazione, anche se visualizzabile.