13

我在一个问题中有两个 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 的本意不是带有性别偏见,那么有什么区别呢?

4

2 回答 2

27

“可以显示在屏幕上”的“可打印”有所不同。您的终端将低 ascii 打印机控制代码 0x0B 和 0x0C 显示为男性和女性符号,因为这就是字体中的索引所包含的内容。这些字符更准确地描述为垂直制表符和换页符。这两个字符以及 \t \r 和 \n 都是可打印的,并且可以在打印机上进行明确定义的操作。

于 2009-01-06T21:15:36.713 回答
6

从 cmd.exe 中:

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

Emacs 内部:

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

这是formats(5) '手册页的摘录:

| 序列 | 性格 | 终端行动 |
|----------+--------------+---------- ----------------------|
| \f | 换页 | 将打印位置移动到初始 |
| | | 下一个逻辑页的打印位置。|
| \v | 垂直标签 | 将打印位置移动到 | 的开头
| | | 下一个垂直制表位置。如果有|
| | | 没有更多的垂直标签位置留在 |
| | | 页面,行为未定义。|
于 2009-01-06T22:27:59.097 回答