为什么ANSI转义代码无法正确显示?

时间:2020-11-11 17:40:16

标签: console-application ansi-escape

我正在实现一个Python控制台应用程序,该应用程序使用ANSI转义码来着色各种颜色。我使用Pop OS(Ubuntu衍生产品)进行开发,并且按设计进行着色。

我刚刚在Centos机器上试用了该应用程序,虽然颜色正确显示,但是在彩色文本周围还有其他文本(包含数字的小盒子,垂直堆叠),显然与转义码相对应。

所有转义代码均在此Python代码中指定:

style = ('\033[1m\033[3m' if bold and italic else
         '\033[1m' if bold else
         '\033[3m' if italic else
         '\033[0m')
return f'\001{style}\002\001\033[38;5;{color.code}m\002{s}\001\033[0m\002'

(我正在研究的项目是https://github.com/geophile/marcel,上面的代码来自marcel.util.colorize()。)

真正奇怪的是,在某些情况下,多余的字符不存在,而在其他情况下则存在。另外,如果我从pop os机器切换到centos机器,则在所有情况下文本均正确着色。

是什么解释了这种行为差异-.bashrc中的某些内容?关于X的配置?

1 个答案:

答案 0 :(得分:0)

\002 不是“ ANSI”转义码。某些程序(而不是 terminals )可能会解释它,并且根据字符串的使用方式,可能会绕过打算处理的程序多余的逃生。 (当然,某些 terminals 可能会为 002 等提供自己的解释,但是,除了源代码之外,您不太可能在任何地方找到记录的文档。 )。