[英]Bizarre behavior of python printing non-alphabetic ASCII characters
我有以下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字符有关。 有人可以帮我解决这个问题吗?
带有这些字符的Esc
为终端设置特殊代码。
终端控制代码是打印的特殊字符序列(与其他任何文本一样)。 如果终端理解了代码,它将不会显示字符序列,但是会执行一些操作。 您可以使用简单的echo命令打印代码。
例如,
控制顺序根据您使用的终端而有所不同。
更多关于:
这是由于转义序列和字符编码之间的混淆。
您的程序正在打印转义序列 ,包括
在ISO-8859-1(和ECMA-48)中,介于128和159之间的字符字节被视为控制字符 ,称为C1
控件。 其中几个被视为与转义符和另一个字符组合在一起。 C1
和“另一个字符”之间的映射并不简单,但有趣的包括
0x9a
是设备属性 ,导致字符发送到主机。 0x9b
是控制序列的发起者 ,通常被认为是转义 [ 。 另一方面,128-159范围内的字节是UTF-8字符的合法部分。 如果终端没有正确配置为与语言环境设置匹配,则可以发现终端对控制序列做出了响应。
OSX终端实现(没有文档...)许多标准控制序列。 XTerm记录了这些文件(以及许多其他文件),因此您可能发现以下有用:
为了娱乐,您可以参考xterm常见问题解答: 有趣但令人误解
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.