当我在windows上运行我的rust应用程序时,颜色与cargo run一起工作,但当直接使用二进制文件时,颜色完全中断。为什么?

当我在windows上运行我的rust应用程序时,颜色与cargo run一起工作,但当直接使用二进制文件时,颜色完全中断。为什么?,rust,Rust,在mac电脑上,颜色是完美的,不管它只是在windows上以一种非常奇怪的方式断裂。当使用cargo run或cargo run运行应用程序时——释放颜色是完美的(如图所示) 但是当直接在windows上运行二进制文件时,颜色完全中断(如图所示) “帮助”菜单的代码为: //NovusCLI帮助 普林顿!(“\n[1mNovusCLI Help[0m\n”); //nvs搜索 println!(“[1;35mnvs[0m[1;33msearch[0m\t\t\t搜索指定查询”); //nvs

在mac电脑上,颜色是完美的,不管它只是在windows上以一种非常奇怪的方式断裂。当使用cargo run或cargo run运行应用程序时——释放颜色是完美的(如图所示)

但是当直接在windows上运行二进制文件时,颜色完全中断(如图所示)

“帮助”菜单的代码为:

//NovusCLI帮助
普林顿!(“\n[1mNovusCLI Help[0m\n”);
//nvs搜索
println!(“[1;35mnvs[0m[1;33msearch[0m\t\t\t搜索指定查询”);
//nvs列表[--标志]
println!(“[1;35mnvs[0m[1;33mlist[--标志][0m\t列出指定的包装”);
//nvs信息
println!(“[1;35mnvs[0m[1;33minfo[0m\t\t\t在指定包上显示信息”);
//nvs安装
println!(“[1;35mnvs[0m[1;33分钟高[0m\t\t安装指定的包”);
//nvs重新安装
println!(“[1;35mnvs[0m[1;33mreinstall[0m\t\t安装指定的软件包”);
//nvs移除
println!(“[1;35mnvs[0m[1;33mremove[0m\t\t\t移动指定的包”);
//添加密钥
println!(“[1;35mnvs[0m[1;33madd key[0m\t\t\t将密钥添加到受信任密钥列表中”);
//编辑源
println!(“[1;35mnvs[0m[1;33medit来源[0m\t\t\t打开APT回购编辑器”);
//自动记忆
println!(“[1;35mnvs[0m[1;33mautoremove[0m\t\t\t\t删除不需要的包(孤立)”;
//nvs更新
println!(“[1;35mnvs[0m[1;33mupdate[0m\t\t\t\t更新存储库列表”);
//nvs升级
println!(“[1;35mnvs[0m[1;33mupgrade[0m\t\t指定包”);
//nvs完全升级
println!(“[1;35mnvs[0m[1;33m全面升级[0m\t\t升级系统(或包))”;
//nvs版本
println!(“[1;35mnvs[0m[1;33mversion[0m\t\t\t显示APT、DPKG和NovusCLI版本”);
//nvs清洁
println!(“[1;35mnvs[0m[1;33mclean[0m\t\t\t\t读取下载缓存”);
//nvs帮助
println!(“[1;35mnvs[0m[1;33mhelp[0m\t\t\t打开指定命令的帮助菜单”);
//nvs关于
println!(“[1;35mnvs[0m[1;33mabout[0m\t\t\t查看法律信息和信用证”);
我知道我可以用一个生锈的板条箱为我处理着色,但是我能找到的所有支持窗口的着色板条箱都使用libc或winapi,这两种都是不安全的,这就是为什么我拒绝使用这些板条箱进行着色。有人知道为什么直接在窗口上使用垃圾箱会破坏所有着色吗?我尝试了这两种命令pt和Windows PowerShell都有完全相同的问题

我在“帮助”菜单中输入了所有代码,但stackoverflow似乎隐藏了特殊字符,因此下面是代码的pastebin链接:

下面是代码的图片:


Windows支持VT100转义序列(您的颜色代码)仅随Windows 10的一些较新更新一起添加,并且必须通过本机API为每个应用显式启用。这是通过带有
ENABLE_VIRTUAL_TERMINAL_INPUT
参数的函数完成的。另一种方法是使用该函数直接设置终端颜色——此变体也适用于较旧的Windows版本。Obv很显然,这两种方法都需要不安全的代码


一般来说,我不建议仅仅因为库中包含不安全的代码就拒绝它们。正如这个例子所示,没有它,有些事情是无法实现的。此外,Rust标准库也大量使用了不安全的
unsafe

我认为windows console对ANSI代码的支持很差,cargo一定在进行某种模拟,而不是硬编码终端控制序列。它们并不总是有效的,正如您刚才发现的那样。@n.m.那么我该怎么办?有库。