Python 在打印某些 Unicode c1 控制字符时会挂起,且方式不一致

Python 在打印某些 Unicode c1 控制字符时会挂起,且方式不一致

为了测试目的,我创建了一个字节为 0xc2 0x90 的文件,代表 UTF-8 编码中的 Unicode 代码点 0x90。

我可以cat毫无问题地读取这个文件,但是尝试print从中写入字符串,或相应的文字,或以其他方式创建的字符串......

Python 3.8.10 (default, Mar 15 2022, 12:22:08) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('\x90')

导致终端挂起。程序甚至不响应 Ctrl-C。

其他几个单独的角色也发生了同样的事情,我看不出有什么规律。

更奇怪的是:

>>> for i in range(150): print(chr(i))

即使打印的字符之一是有问题的 0x90 字符,此操作仍会成功。如果我将范围终止于156,它将再次挂起,但可中断。

我找不到这种行为的任何原因。我知道我试图显示控制字符,这可能会导致终端输出看起来很奇怪,光标跳来跳去等等;但我不希望终端硬挂起。而且,输出与我尝试以其他方式(如)显示字符时得到的结果不同cat

发生了什么事,下一步我应该尝试什么来修复它?我在 Linux Mint (20.3,Una) 上使用内置的 Python 3.8.10 安装,内核版本为 5.4.0-109-generic。

相关内容