为什么Python的string.printable包含不可打印的字符?

2024-05-20 08:46:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个问题里有两个可打印的谜团。

首先,在Python2.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并不是有意偏袒性别的,那么有什么区别呢?


Tags: 字符串inforstring符号字符拇指print
2条回答

“可打印”与“可在屏幕上显示”有区别。终端将低位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

以下是formats(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.        |

相关问题 更多 >