gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:12:05 26 4
gpt4 key购买 nike

我有以下Python代码:

for num in range(80, 150):
input()
print(num)
print(chr(27))
print(chr(num))

input() 语句仅用于控制 for 循环进行的速度。我并不期望这会做任何特别的事情,但是当循环达到某些数字时,打印该 ASCII 字符,前面加上 ASCII 27(这是 ESC 字符)会做一些意想不到的事情:

  • 在 92 和 94 时,不会打印数字。 /image/DzUew.png

  • 在 99(字母 c)处,一堆终端输出被删除。 /image/5XPy3.png

  • 在 108(字母 l)处,当前行向上跳几行(但文本仍保留在下面)。 (没有获得合适的屏幕截图,如果有帮助,我稍后会添加一个)

  • 在 128 或 129 处,第一个字符开始被屏蔽。您必须输入一些内容(我输入“jjj”)以防止该行发生这种情况。 /image/DRwTm.png

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

最佳答案

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

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

  • escapec(重置终端)
  • escape^(开始隐私消息,导致其他字符被吃掉)

在 ISO-8859-1(和 ECMA-48)中,128 到 159 之间的字符字节被视为控制字符,称为 C1 控件。其中一些的处理方式与 escape 与另一个字符组合相同。 C1 和“另一个字符”之间的映射并不简单,但有趣的包括

  • 0x9a 这是设备属性,导致字符被发送到主机。
  • 0x9b控制序列启动器,通常被视为转义符[

另一方面,128-159 范围内的字节是 UTF-8 字符的合法部分。如果您的终端未正确配置为匹配区域设置设置,您会发现您的终端响应控制序列。

OSX 终端实现(不记录...)许多标准控制序列。 XTerm 记录了这些(以及许多其他),因此您可能会发现以下有用:

为了娱乐,您可以引用 xterm 常见问题解答:Interesting but misleading

关于python - python 打印非字母 ASCII 字符的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34784545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com