Почему Python string.printable содержит непечатаемые символы?
-
03-07-2019 - |
Вопрос
У меня есть две загадки String.printable в одном вопросе.
Во-первых, в Python 2.6:
>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
Посмотрите на конец строки, и вы увидите, что '\ x0b \ x0c' торчит, как больной палец. Почему они там? Я использую машину с австралийскими настройками, поэтому не должно быть никаких акцентированных символов или тому подобного.
Затем попробуйте запустить этот код:
for x in string.printable: print x,
print
for x in string.printable: print x
Первая строка успешно печатает все символы, разделенные пробелом. Два нечетных символа оказываются мужскими и женскими.
Во второй строке успешно печатаются все символы, кроме последних, разделенных переводом строки. Мужской символ печатает; женский символ заменяется пропущенным символом (прямоугольником).
Я уверен, что Python не был предназначен для гендерных предрассудков, так что же даст разницу?
Решение
Существует разница в типе «печати» для " может отображаться на вашем экране " ;. Ваш терминал отображает управляющие коды принтера ascii 0x0B и 0x0C в качестве мужского и женского символов, потому что именно это содержат эти индексы в вашем шрифте. Эти символы более точно описаны как символы вертикального табулятора и формы. Эти два символа, наряду с \ t \ r и \ n, пригодны для печати и позволяют выполнять четкие операции на принтере.
Другие советы
Изнутри cmd.exe:
>>> print '\x0b'
♂
>>> print '\x0c'
♀
>>> print '\f' # form feed
♀
>>> print '\v' # vertical tab
♂
>>>
Внутри Emacs:
>>> print '\f\v'
^L^K
Вот выдержка из форматов (5) Страница справочника:
| 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. |