¿Por qué el string.printable de Python contiene caracteres no imprimibles?
-
03-07-2019 - |
Pregunta
Tengo dos misterios String.printable en una pregunta.
Primero, en Python 2.6:
>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
Mira el final de la cadena, y encontrarás '\ x0b \ x0c' sobresaliendo como un dolor de pulgar. ¿Por qué están ellos ahí? Estoy usando una máquina configurada con la configuración australiana, por lo que no debería haber ningún carácter acentuado o similar.
A continuación, intente ejecutar este código:
for x in string.printable: print x,
print
for x in string.printable: print x
La primera línea imprime con éxito todos los caracteres separados por un espacio. Los dos personajes impares se convierten en los símbolos masculino y femenino.
La segunda línea imprime con éxito todos los caracteres, EXCEPTO LOS ÚLTIMOS separados por un salto de línea. El símbolo masculino se imprime; el símbolo femenino se sustituye por un carácter que falta (un cuadro).
Estoy seguro de que Python no estaba destinado a tener un sesgo de género, así que, ¿qué da con la diferencia?
Solución
Hay una diferencia en " imprimible " para " se puede mostrar en su pantalla " ;. Su terminal muestra los códigos de control de impresora de baja ascii 0x0B y 0x0C como símbolos masculinos y femeninos porque eso es lo que contienen esos índices en su fuente. Esos caracteres se describen con mayor precisión como tabulador vertical y caracteres de avance de página. Estos dos caracteres, junto con \ t \ r y \ n, son imprimibles y hacen cosas bien definidas en una impresora.
Otros consejos
Desde cmd.exe:
>>> print '\x0b'
♂
>>> print '\x0c'
♀
>>> print '\f' # form feed
♀
>>> print '\v' # vertical tab
♂
>>>
Dentro de Emacs:
>>> print '\f\v'
^L^K
Aquí hay un extracto de formatos (5) página de manual:
| Sequence | Character | Terminal Action | |----------+--------------+---------------------------------------------| | \f | form-feed | Moves the printing position to the initial | | | | printing position of the next logical page. | | \v | vertical-tab | Moves the printing position to the start of | | | | the next vertical tab position. If there | | | | are no more vertical tab positions left on | | | | the page, the behavior is undefined. |