使用ANSI控制字体颜色

引言

ANSI是一种字符编码,其扩展了ASCII编码。
如果想在终端输出带有颜色的字体,可以通过ANSI来实现。
window 系统不支持颜色,cygwin 和 mingw支持颜色。

控制码

ANSI控制码均以 Esc 作为控制码的开始标志,其中,
Esc 的ansi十进制码为 27,八进制码为33,所以可以使用 \033 表示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
\33[0m   关闭所有属性
\33[1m   设置高亮度
\33[4m   下划线
\33[5m   闪烁
\33[7m   反显
\33[8m   消隐
\33[30m -- \33[37m   设置前景色
\33[40m -- \33[47m   设置背景色
\33[nA   光标上移n行
\33[nB   光标下移n行
\33[nC   光标右移n行
\33[nD   光标左移n行
\33[y;xH设置光标位置(现已很少使用)  
\33[2J   清屏
\33[K    清除从光标到行尾的内容
\33[s    保存光标位置
\33[u    恢复光标位置
\33[?25l   隐藏光标
\33[?25h   显示光标
\33[30m到 \33[37m 设置前景色
\33[40m到 \33[47m 设置背景色

参考自:https://www.cnblogs.com/hbt19860104/archive/2012/08/07/2627130.html

常用颜色码

字体颜色范围:30-39
字体背景颜色范围:40-49

1
2
3
4
5
6
7
8
9
10
11
12
//重置color,恢复默认color
private static final String RESET = "\033[0m";

private static final int DEFAULT = 39;//默认颜色
private static final int BLACK = 30;//黑色
private static final int RED = 31;//红色
private static final int GREEN = 32;//绿色
private static final int YELLOW = 33;//黄色
private static final int BLUE = 34;//蓝色
private static final int MAGENTA = 35;//紫色
private static final int CYAN = 36;//青色
private static final int WHITE = 37;//白色

详细颜色码

说明:
\033[#m 为样式,
\033[3#m 为前景色,
\033[4#m 为背景色,
\033[1;3#m 为粗体前景色。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
\033[0m关
\033[1m粗体\033[0m
\033[2m无\033[0m
\033[3m无\033[0m
\033[4m下划线\033[0m
\033[5m闪烁\033[0m
\033[6m无\033[0m
\033[7m反显\033[0m
\033[8m消隐\033[0m
\033[9m无\033[0m

\033[30m黑\033[0m
\033[31m酱红\033[0m
\033[32m浅绿\033[0m
\033[33m黄褐\033[0m
\033[34m浅蓝\033[0m
\033[35m紫\033[0m
\033[36m天蓝\033[0m
\033[37m灰白\033[0m

\033[1;30m浅黑\033[0m
\033[1;31m红\033[0m
\033[1;32m绿\033[0m
\033[1;33m黄\033[0m
\033[1;34m蓝\033[0m
\033[1;35m粉红/洋红\033[0m
\033[1;36m青/蓝绿\033[0m
\033[1;37m白\033[0m

参考自:http://www.yeolar.com/note/2013/01/16/ansi-color/

例子 + 说明

比如:"\033[33m黄色字体\033[0m"
其中:
“\033[” : 控制码的开始开始标志
“33” :颜色编码,33表示黄色
“m” :控制字符相关的标志
“\033[0m” :恢复默认颜色,通常结束处会将颜色恢复为默认39

1
2
3
public static void main(String[] args) {
    System.out.println("\033[33m黄色字体\033[0m");
}

使用idea测试会有一些显示不出来。