xterm 不会挂起。echo -e '\x9f' 不会在 xterm 或 gnome 终端上挂起。非 REPL python3(尝试过 3.6、3.8、3.9)会截断字符串但不会挂起。IPython 7.13.0 也是如此
Gnome 终端版本是 3.36.2
那么发生了什么事?我在他们的错误跟踪器中找不到与此相关的 Python 或 Gnome Terminal 的错误。
答案1
python3print('\x9f')
打印 U+009F 字符的 UTF-8 编码版本(假设您的语言环境设置为 UTF-8,这是一个非常合理的假设)。这与 打印的单个 0x9F 字节不同echo -e '\x9f'
,后者是无效的 UTF-8。
U+0080 .. U+009F 是控制字符,可能会导致后续数据被解释为参数,而不是要显示的字母。一些终端仿真器(例如 gnome-terminal)甚至在 UTF-8 中也支持这些控制字符,而其他一些终端仿真器(例如 xterm)在 UTF-8 中拒绝它们,并且只识别此编码中的 7 位干净对应物。哪一个是正确的可能值得商榷。
底线是:永远不要在终端上打印不可打印的内容(根据iswprint()
或等效内容),除非您确切知道自己在做什么(例如,您的明确意图是打印转义序列)。并坚持使用 7 位干净的 C0 控制代码,而不是有问题的 C1 控制代码。