我无法在终端打印彩色转义码。

20

当我运行这个脚本时:

fn main() {
    // \033[0;31m <- Red
    // \033[0m <- No Color
    println!("\033[0;31mSO\033[0m")
}

我希望能够获得

SO #in red letters

然而,我得到:

33[0;31mSO33[0m

在 Go 或 Python 中运行类似脚本时,我可以得到预期的输出。发生了什么事情?我错过了什么?如何修复此问题?

我正在使用:

$ rustc --version
rustc 1.3.0 (9a92aaf19 2015-09-15)
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:    14.04
Codename:   trusty
1个回答

53

Rust 1.3.0似乎不支持八进制转义字符串,如\033。 相反,您可以使用十六进制转义字符串,例如\x1b

fn main(){
  println!("\x1b[0;31mSO\x1b[0m")
}

更新:本回答的意图是“您不能使用八进制字符,例如\033,请改用十六进制字符\x1b”,但如果您想了解有关 ANSI转义代码 的更多信息,也许这个 gist 会很有用。


11
我的天啊,我费尽心思地寻找这个问题的答案。其他地方都充斥着“使用这个板条箱”或“使用那个板条箱”的垃圾。这才是这个问题的正确答案。非常感谢您直接回答了这个问题! - the chad
7
值得一提的是,人们建议你使用一个 crate 的原因是为了让你的着色在 Windows 上正常工作。 - BurntSushi5
3
@BurntSushi5 不过,并不是每个人都关心 Windows。 - Philipp Ludwig
3
我没有说过也没有暗示他们这样做了。 - BurntSushi5
1
如果您能在答案中包含文档中说明此事的链接,我将不胜感激。我花了很长时间才找到这个答案,我想知道文档中是否有相关内容,以便我知道我在寻找时出了什么问题。 - Max888
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接