Perché string.printable di Python contiene caratteri non stampabili?
-
03-07-2019 - |
Domanda
Ho due misteri String.printable in una domanda.
Innanzitutto, in Python 2.6:
>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
Guarda la fine della stringa e troverai '\ x0b \ x0c' sporgente come un mal di pollice. Perché sono lì? Sto usando una macchina impostata sulle impostazioni australiane, quindi non dovrebbero esserci caratteri accentati o simili.
Quindi, prova a eseguire questo codice:
for x in string.printable: print x,
print
for x in string.printable: print x
La prima riga stampa correttamente tutti i caratteri separati da uno spazio. I due personaggi dispari si presentano come simboli Maschile e Femminile.
La seconda riga stampa correttamente tutti i caratteri TRANNE L'ULTIMA separati da un avanzamento riga. Il simbolo maschile viene stampato; il simbolo femminile è sostituito da un carattere mancante (una casella).
Sono sicuro che Python non era destinato a essere influenzato dal genere, quindi cosa offre la differenza?
Soluzione
C'è una differenza in " stampabile " per " può essere visualizzato sullo schermo " ;. Il terminale visualizza i codici di controllo della stampante ASCII bassi 0x0B e 0x0C come simboli maschio e femmina perché è quello che contengono quegli indici nel font. Quei personaggi sono descritti più accuratamente come i caratteri Tabulatore verticale e Avanzamento modulo. Questi due caratteri, insieme a \ t \ r e \ n, sono tutti stampabili e fanno cose ben definite su una stampante.
Altri suggerimenti
Dall'interno di cmd.exe:
>>> print '\x0b'
♂
>>> print '\x0c'
♀
>>> print '\f' # form feed
♀
>>> print '\v' # vertical tab
♂
>>>
Inside Emacs:
>>> print '\f\v'
^L^K
Ecco un estratto dai (5) 'man page:
| 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. |