C# 在linux终端中使用256色的正确方法

在编写CLi程序的过程中,可能遇到需要打印带颜色的字符串用于高亮显示或是其他原因。linux的终端模拟器支持256色输出,但是我们怎么才能使用呢?你可能知道使用终端转义序列,但C#编译器无法识别这种转义。

1

先给不了解的小伙伴科普下,linux的大部分终端都是支持256色的,这就意味着你可以在终端中打印256中颜色的字符,如下图所示。

256色

如果你随便百度一下你就能知道怎么在shell中打印,例如下面的代码

1
echo -e "\e[0;38;5;16m黑色字\e[0m"

在终端中输入后,确实可以打印出黑色的字,改变m前的值还可以有其他的颜色。

它利用的就是\e\033转义(其实这两个是一个东西),但是你丢到C#中,要么\e无法转义,要么\033被识别为'\0' + "33"

解决方法

我随便写了个C的程序

1
2
3
4
5
#include <stdio.h>
int main(void){
printf("%d",'\e');
return 0;
}

输出为

1
27%

这样就查到了'\e'的ASCII码(百分号是zsh补的换行符)。

那么我们就可以用(char)27来表示'\e'了。

1
2
3
using System;

Console.WriteLine($"{(char)27}[0;38;5;16m黑色字{(char)27}[0m");

这下C#256色那不是有手就行?