为什么 ANSI 转义码显示不正确?

Why are ANSI escape codes not displaying properly?

我正在实现一个 Python 控制台应用程序,它使用 ANSI 转义码来为各种事物着色。我在 Pop OS(一个 Ubuntu 派生词)上开发,并且着色按设计工作。

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

转义码都在Python的这个位指定:

style = ('3[1m3[3m' if bold and italic else
         '3[1m' if bold else
         '3[3m' if italic else
         '3[0m')
return f'[=10=]1{style}[=10=]2[=10=]13[38;5;{color.code}m[=10=]2{s}[=10=]13[0m[=10=]2'

(本人正在做的项目是https://github.com/geophile/marcel,以上代码来自marcel.util.colorize()。)

真正奇怪的是,在某些情况下,多余的字符不存在,而在其他情况下却存在。另外,如果我从我的 pop os 机器通过 ssh 连接到我的 centos 机器,文本在所有情况下都会正确着色。

如何解释这种行为差异 - .bashrc 中的某些内容?关于 X 配置?

[=10=]2 不是“ANSI”转义码。一些 programs(不是 terminals)可能会解释它,并且根据字符串的使用方式,可能会绕过 programs 用于处理额外的转义。 (一些 终端 当然可以为 002 等提供他们自己的解释,但你不太可能在任何地方找到记录除了他们的源代码)。