为了测试目的,我创建了一个字节为 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。