尝试打印 ASCII 字符 128 到 160,为什么它停在 157 处?

Yoh*_*ier 4 python ascii

我是 Python 新手,正在学习编码/编码、unicode、ascii 等。\n我想根据代码并使用 chr() 函数打印 ASCII 字符。

\n
def table_ascii():\n    "proc\xc3\xa9dure imprimant une table des caract\xc3\xa8res ascii avec leur valeurs"\n    i = 127\n    while i < 258:\n        print(f"{i} -> {chr(i)}")\n        i += 1\n\ntable_ascii()\n
Run Code Online (Sandbox Code Playgroud)\n

不幸的是,结果是错误的。它停在代码 157 处:

\n
127 ->  \n128 ->  \n129 ->  \n130 ->  \n131 ->  \n132 ->  \n\n133 ->  \n\n134 ->  \n135 ->  \n136 ->  \n137 ->      \n138 ->  \n139 ->  \n140 ->  \n142 ->  \n143 ->  \n144 ->  \n146 ->  \n147 ->  \n148 ->  \n149 ->  \n150 ->  \n151 ->  \n152 ->  \n154 ->  \n        155 ->  \n\n157 ->\n
Run Code Online (Sandbox Code Playgroud)\n

我知道这些代码返回空白,但为什么它们会停止该过程?

\n

设置:

\n
    \n
  • Linux 上的 Python 3.8.10(默认,2021 年 9 月 28 日,16:10:42)\n[GCC 9.3.0]
  • \n
  • 使用 VIM - Vi 改进 8.1
  • \n
\n

当我在 Visual Studio Code 中运行此代码时,脚本会生成 256 的输出。但在我的控制台 (Linux Mate) 中,它会阻塞。这对我来说很难理解...

\n

wja*_*rea 8

首先,ASCII 最多只能达到 127 (0x7F)。chr()实际上返回Unicode字符。

\n

我认为问题是,当打印 U+9D (157)操作系统命令 (OSC)时,您的终端启动一个控制字符串并等待字符串终止符,例如 U+9C String Terminator、 U+1B Escape后跟 U+5C反斜杠,或 U+7 BEL。由于这些序列后来都不会被打印,因此终端停止显示输出。有关详细信息,请参阅Wikipedia 上的ANSI 转义代码 \xc2\xa7 Fe 转义序列C1 控制代码

\n

Unicode 字符 U+80 (128) 到 U+9F (159) 是控制字符,这意味着它们通常不可打印,因此您一开始就不会获得合理的输出。

\n

  • 出色的!我将打印行更改为 `print(f"{i} -&gt; {chr(i)}{chr(0x9c)}")` 以始终确保它终止并且有效 (4认同)