我写过Python 模块倾倒物体。但是,当将其与numpy.ndarray
在linux
终端 ( ) 中保存二进制数据(例如 )的对象一起使用时TERM=linux
,打印出数据会导致终端的字体中断 - 显然,某些字符被视为终端控制序列。在 Windows 中,即使在 Cygwin 的mintty
终端中,打印也可以正常工作(尽管如此TERM=xterm
)。
cat
当我使用二进制文件时也会发生同样的情况。
当然,我可以用 来解决这个问题reset
,但代价是失去输出,而且通常很不方便。虽然我知道大多数(如果不是全部)控制字符在字体中都有替代图形表示(例如,对于CR
,它是♪
)。
所以,有没有办法改变原始流,使linux
终端将其中的特殊字符视为文字?基本上,我希望看到这样的东西:
我主要对编程方式感兴趣(=从终端的角度需要做什么,以及公共系统库中的实现(如果有的话)); shell 中的方式将是一个优点。
Pythonrepr()
不符合我的需求:它将任何不可打印的 ASCII 字符扩展为可变长度序列,包括国家字母,而该模块的设计目标是使转储打印输出简洁易读。
答案1
这showconsolefont
程序可以显示 256 个不同的(或 512 个不同的......)字形立即在 Linux 控制台上。但它使用系统调用来完成此操作(这恰好仅适用于与控制台设备的连接)。它的手册页没有提到这一点。
但字形(用于显示字符)与人物。您可以通过在终端上打印来显示字符,然后终端将其映射到字形。没有转义序列可以告诉 Linux 控制台将控制字符视为可打印。
例如,showconsolefont
实际上并不写单元格 0-31 的控制字符。它地图使用(您猜对了)系统调用将可打印字符转换为 0-31 范围。
进一步阅读:
答案2
我不知道有什么方法可以改变终端接受所有字符。控制字符是特征程序的职责通常是注意终端类型,为它想要使用的终端功能生成正确的控制字符,并转义它想要打印的任何控制字符。
例如,可以在以下位置找到如何更改 Python 程序来执行此操作的信息:这堆栈溢出问题。
在 shell 中,您可以使用 egtr
将控制字符转换为其他 ASCII 字符(尽管不是 unicode 字符)。看这关于可以使用 unicode 字符的替代方案的问题。
统一码定义了一个控制画面组显示控制字符,例如回车符是␍
。如果从未听说过♪
代表 CR,如果听说过,那么这在您碰巧使用的某些字体中纯粹是偶然的。
在 shell 中,您不仅仅是cat
一个二进制文件,而是使用hexdump -C
或类似的方法来检查它。