如何显示超出范围的ascii字符?

时间:2013-06-22 18:19:25

标签: python less ascii

我使用PuTTY连接到Linux机器。

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

您已将less配置为将原始字符显示为表示这些不可打印字符的ASCII字符组合; -r--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)

答案 1 :(得分:0)

是远程机器可能设置为unicode(现代Linux发行版是),然后确保你运行带有unicode设置的putty。