【问题标题】:Printing color characters in string variable with Python 2.7使用 Python 2.7 在字符串变量中打印颜色字符
【发布时间】:2016-05-29 07:27:54
【问题描述】:

这个话题似乎已经在 SO 上被讨论死了,但我仍然无法用 ANSI 颜色字符来渲染一个简单的字符串。显然以下工作正常,站点名称在我的终端上显示为绿色:

>>> print u'I love \u001b[0;32mStack Overflow\u001b[0m'
I love Stack Overflow

但是:

>>> test='I love \u001b[0;32mStack Overflow\u001b[0m'

>>> test
'I love \\u001b[0;32mStack Overflow\\u001b[0m'

>>> print test
I love \u001b[0;32mStack Overflow\u001b[0m

>>> print test.encode('utf8')
I love \u001b[0;32mStack Overflow\u001b[0m

>>> print test.decode('utf8')
I love \u001b[0;32mStack Overflow\u001b[0m

>>> print unicode(test, 'utf8')
I love \u001b[0;32mStack Overflow\u001b[0m

什么鬼?

【问题讨论】:

标签: python unicode colors ansi-colors


【解决方案1】:

将其定义为 Unicode 字符串:

 test = u'I love \u001b[0;32mStack Overflow\u001b[0m'

这样就可以正确打印了:

>>> print test
I love Stack Overflow

【讨论】:

  • 如果可以,我会,但我不能。我按原样得到变量。
  • @chris_here:你了解u'\u0021'u'\\u0021' 之间的区别吗?更新您的问题并包含 实际 值(运行 print repr(your_variable))。
【解决方案2】:

如果您在字节字符串中收到 Unicode 转义,请对其进行解码:

>>> test='I love \u001b[0;32mStack Overflow\u001b[0m'
>>> test
'I love \\u001b[0;32mStack Overflow\\u001b[0m'
>>> test.decode('unicode_escape')
u'I love \x1b[0;32mStack Overflow\x1b[0m'
>>> print(test.decode('unicode_escape'))
I love Stack Overflow

【讨论】:

  • 好的,这正是我所追求的,非常感谢。我认为混淆源于这样一个事实,即使用 ASCII 字符 \033 或 \x1b 很容易工作,但 \u001b 没有。
  • 如果你得到一个包含 \033 或 \x1b 的单个字符的字节字符串(每个 4 个字节),你仍然需要对它们进行解码。
猜你喜欢
  • 2017-03-19
  • 2012-12-12
  • 2014-09-16
  • 2016-05-10
  • 1970-01-01
  • 2021-12-26
  • 2013-08-29
  • 2016-12-03
  • 2018-05-09
相关资源
最近更新 更多