我有以下Python代码:
for num in range(80, 150):
input()
print(num)
print(chr(27))
print(chr(num))
input()语句仅用于控制for循环的进行速度。我不希望这做任何特别的事情,但是当循环达到某些数字时,打印ASCII字符,前面是ASCII 27(这是ESC字符)会做一些意想不到的事情:
在92和94,数字不打印。 http://i.stack.imgur.com/DzUew.png
在99(字母c)处,一堆终端输出被删除。 http://i.stack.imgur.com/5XPy3.png
在108(字母l)处,当前行跳过几行(但文本保持在下面)。 (没有得到合适的屏幕保护,如果有帮助,我会稍后添加一个)
在128或129时,第一个字符开始被屏蔽。你必须输入一些东西(我键入" jjj")以防止在该行上发生这种情况。 http://i.stack.imgur.com/DRwTm.png
我不知道为什么会发生这种情况,尽管我认为这与ESC角色与终端交互有关。有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
Esc
为终端创建了一个特殊代码。
终端控制代码是一个特殊的字符序列 打印(像任何其他文本一样)。如果终端理解代码, 它不会显示字符序列,但会执行一些操作。 您可以使用简单的echo命令打印代码。
例如,
控制序列根据您使用的终端而有所不同。
更多关于:
答案 1 :(得分:1)
这是由于转义序列和字符编码之间的混淆。
您的程序正在打印转义序列,包括
在ISO-8859-1(和ECMA-48)中,128和159之间的字符字节被视为控制字符,称为C1
控件。其中一些与 escape 和另一个角色相同。 C1
和“另一个角色”之间的映射并不简单,但有趣的包括
0x9a
设备属性,导致字符被发送到主机。0x9b
控制序列发起人,通常被视为 escape [。另一方面,128-159范围内的字节是UTF-8字符的合法部分。如果未正确配置终端以匹配区域设置设置,则可以发现终端响应控制序列。
OSX终端实现(不记录......)许多标准控制序列。 XTerm记录了这些(以及许多其他),因此您可能会发现以下内容:
为了娱乐,请参阅xterm FAQ:Interesting but misleading