3

我正在运行一个控制台应用程序,该应用程序从房子周围的各种传感器获取数据。有时传输被中断,因此数据包没有意义。发生这种情况时,数据包的内容将输出到终端会话。然而,发生的事情是,在输出错误数据包时,它包含改变当前终端窗口字符集的字符,将任何文本(除了数字)呈现为不可读的乱码。

在显示错误数据包的同时保留大部分特殊字符的最佳方法是什么?究竟什么是可以改变终端行为的序列?

我还想补充一点,除了打乱的输出之外,应用程序仍然可以正常工作。

4

3 回答 3

2

您的终端可能会响应ANSI 转义码。为了防止数据无意中影响终端,您可以打印repr数据,而不是数据本身:

例如,

good = 'hello'
bad = '\033[41mRED'

print('{!r}'.format(good))
print('{!r}'.format(bad))

产量

'hello'
'\x1b[41mRED'

然而

print(good)
print(bad)

产量

在此处输入图像描述

(顺便说一句,键入reset将重置终端。)

于 2013-04-04T14:46:06.043 回答
1

您可以转换 ASCII 范围之外的所有字符,这应该消除任何会改变终端状态的杂散转义序列。

print s.encode('string-escape')
于 2013-04-04T14:55:24.783 回答
0

当你收到一个数据包时,在输出它之前检查它的有效性。一种可能性是在输出之前检查数据包中的每个字符是否可打印,即在十进制的 32-127 范围内。或者向数据包添加校验和,并拒绝任何校验和错误的数据包。

于 2013-04-04T14:52:13.553 回答