特殊字符 158 和 159 停止终端中的功能

特殊字符 158 和 159 停止终端中的功能

我对两个特殊字符 158(U+009E“私人消息”)和 159(U+009F“应用程序命令”)有疑问。我的问题始于我必须为课程编写的 Clisp 函数,我需要使用 打印出从 0 到 256 的字符串字符(code-char *number*)。我编写的代码有效,并且已得到教授的认可。

但在我的终端上,在四台不同的电脑上,以及在不同版本的 Ubuntu(20.04、22.04、22.10、23.04、23.10)上,字符串在到达字符 158 时就停止了,它只是挂起,永远无法完成字符串。如果我尝试单独打印字符 158 或 159,我的终端也会发生同样的情况。

我在 python 中检查了是否可以使用和打印这些字符,print('\u009e')并且print('\u009f')它可以在 IDLE 中工作,但如果我直接从终端执行此操作,则会发生同样的问题。

我有点不明白为什么会发生这种情况,我想知道是否有人可以解决这个问题。

答案1

0x9e(PM)和0x9f(APC)是C1 控件代码 - ASCII 的 8 位扩展C0 控制. 如上所述控制字节、字符和序列在 ANSI VTxxx 兼容终端中,他们(和其他一些人)引入了一个字符串模式,需要由相应的0x9c(ST)字符串终止代码终止:

Some controls (such as OSC ) introduce a string mode, which is ended
on a ST  (string terminator).
.
.
.
If an application does not send the string terminator, that is also
an error from the standpoint of a user.

因此您的终端很可能正在消耗程序的剩余字节,等待预期的 ST。

相关内容