繁体   English   中英

python打印非字母ASCII字符的怪异行为

[英]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字符)开头)会执行一些意外的操作:

我不知道为什么会发生这种情况,尽管我认为这与与终端交互的ESC字符有关。 有人可以帮我解决这个问题吗?

带有这些字符的Esc为终端设置特殊代码。

终端控制代码是打印的特殊字符序列(与其他任何文本一样)。 如果终端理解了代码,它将不会显示字符序列,但是会执行一些操作。 您可以使用简单的echo命令打印代码。

终端代码

例如,

  • ESC / = ST,字符串终止符(chr(92))
  • ESC ^ = PM,隐私消息(chr(94))。

控制顺序根据您使用的终端而有所不同。

更多关于:

这是由于转义序列和字符编码之间的混淆。

您的程序正在打印转义序列 ,包括

  • 转义 c (重置终端)
  • 转义 ^ (开始出现一条隐私消息,该消息会导致其他字符被吃掉)

在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM