python curses.ascii dependiendo de la configuración regional?
Pregunta
El módulo curses.ascii
tiene algunas funciones agradables definidas, que permiten, por ejemplo, reconocer qué caracteres son imprimibles ( curses.ascii.isprint (ch)
).
Pero, los códigos de caracteres diferentes pueden imprimirse según la configuración regional que se esté utilizando. Por ejemplo, hay ciertos caracteres polacos:
>>> ord('a')
97
>>> ord('ą')
177
>>>
Me pregunto, ¿hay una mejor manera de saber si un número representa un carácter imprimible que el que se usa en el módulo curses.ascii
:
def isprint(c): return _ctoi(c) >= 32 and _ctoi(c) <= 126
que es poco amigable con el entorno local.
Solución
Si convierte el carácter a unicode, puede usar unicodedata:
>>> unicodedata.category(u'ą')[0] in 'LNPS'
True
Otros consejos
Bueno, se llama curses.ascii, por lo que usar reglas ASCII para lo que se puede imprimir no debería ser una sorpresa. Si está utilizando un código ISO de 8 bits o está operando desde una página de códigos conocida, necesitará reglas que correspondan a los códigos reales y sus pantallas.
Creo que está bien usar caracteres Unicode y clasificaciones Unicode estándar. Eso podría no tratar con lo que las maldiciones y la disposición de la consola realmente se mostrarán correctamente.
También debe tenerse en cuenta lo que es aceptable e inaceptable para la aplicación, incluso si se puede visualizar.