Подтвердить что ты не робот

Почему Python string.printable содержит непечатаемые символы?

У меня есть две String.printable mysteries в одном вопросе.

Во-первых, в Python 2.6:

>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>[email protected][\\]^_`{|}~ \t\n\r\x0b\x0c'

Посмотрите на конец строки, и вы увидите, что "\ x0b\x0c" торчит как больной палец. Почему они там? Я использую машину, установленную в австралийских настройках, поэтому не должно быть никаких акцентированных символов или тому подобного.

Затем попробуйте запустить этот код:

for x in string.printable: print x,
print
for x in string.printable: print x

Первая строка успешно печатает все символы, разделенные пробелом. Два нечетных символа оказываются в виде мужских и женских символов.

Вторая строка успешно печатает все символы EXCEPT THE LAST, разделенные линией. Мужской символ печатает; женский символ заменяется отсутствующим символом (поле).

Я уверен, что Python не предназначался для гендерного предвзятого отношения, и что дает с разницей?

4b9b3361

Ответ 1

Существует разница в "printable" для "может отображаться на вашем экране". Ваш терминал отображает коды управления низким уровнем ascii 0x0B и 0x0C в качестве мужских и женских символов, потому что это то, что содержат эти индексы в вашем шрифте. Эти символы более точно описываются как символы вертикального табулятора и формы. Эти два символа, наряду с \t\r и\n, являются полностью пригодными для печати и хорошо определены на принтере.

Ответ 2

Изнутри cmd.exe:

>>> print '\x0b'
♂
>>> print '\x0c'
♀
>>> print '\f' # form feed
♀
>>> print '\v' # vertical tab
♂
>>>

Внутри Emacs:

>>> print '\f\v'
^L^K

Здесь выдержка из format (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.        |