1

我使用 PuTTY 连接到 Linux 机器。

在 Linux 机器上,我正在运行一个 python 脚本,它获取一个字符列表并按顺序打印每个字符及其索引。

我列表中的某些字符不在可打印的 ascii 字符范围内。这些不规则字符正在破坏我的输出。有时它们根本不会出现,而有时它们实际上会删除大量有效文本。

我想我可以通过关闭缓冲来纠正这个问题,但是当我使用 python -u 标志运行脚本时问题仍然存在。

有趣的是,当我将输入传递给较少的阅读器时,不会发生此问题。在 less 中,不规则字符显示如下:<A9><A7>^V^@等。没有丢失任何文本块。

我不确定我的问题出在哪里。有没有办法配置我的终端,以便非管道输出仍会显示不规则字符?

4

2 回答 2

1

您已less配置将原始字符显示为代表这些不可打印字符的 ASCII 字符组合;-ror--raw-control-chars命令行开关执行以下操作:

导致显示“原始”控制字符。默认是使用插入符号显示控制字符;例如,控件-A(八进制 001)显示为“^A”。警告:当使用 -r 选项时,less 无法跟踪屏幕的实际外观(因为这取决于屏幕如何响应每种类型的控制字符)。因此,可能会导致各种显示问题,例如长线在错误的位置被分割。

这是一个特殊less功能。

如果你想对你的 Python 程序做同样的事情,你需要自己做同样的翻译。创建一个将“特殊”字符转换为转义码的映射:

nonprintable = {
    '\x00': '^@',
    '\x01': '^A',
    '\x02': '^B',
    '\x03': '^C',
    '\x04': '^D',
    # etc.
}

for i in range(128):
    character = chr(i)
    print i, nonprintable.get(character, character)
于 2013-06-22T18:30:38.943 回答
0

远程机器是否可能设置为 unicode(现代 linux 发行版是),然后确保您也在使用 unicode 设置运行 putty。

于 2013-06-22T18:30:11.290 回答