前言
在绝大部分情况下我们在命令行终端或者控制台所输出的内容都是黑白色的,但是在使用 Spring Boot 与 IDEA 时却发现启动项目后在控制台竟然出现了彩色字体,那么这是这么实现的呢,其实就是用到了 ANSI 转义序列。
ANSI 转义序列
ANSI 转义序列(ANSI Escape codes)是一种带内信号(In-band signaling)的转义序列标准,用于控制视频文本终端上的光标位置、颜色和其他选项。在文本中嵌入确定的字节序列,大部分以 ESC 转义字符和 [ 字符开始,终端会把这些字节序列解释为相应的指令,而不是普通的字符编码。
固定格式
- 转移字符
Esc
,ASCII 码为 27(十六进制:0x1b
) - 左中括号字符
[
,ASCII 码为 91(十六进制:0x5b
) - 最后以字符
m
收尾
后跟控制键盘和显示功能的字母数字码(区分大小写)
Esc[Value;...;Valuem
支持设置的显示模式包括文本属性,前景色和背景色。
文本属性
前景色
背景色
代码实现(Kotlin)
fun main() {
print("\u001b[4;31;42mHelloWorld!")
}
输出结果:
注意
当我们设置了转义序列或者说是字符颜色等属性之后,这个属性会一直保留着,我们接下来的输出会默认使用这个格式,所以我们需要在设置当前显示属性后,再重置一下所有属性的转义序列 \u001b[0m
。
256种扩展颜色集
前面介绍的前景色和背景色只有八种颜色,可供选择的比较少,如果有对颜色的需求,这时我们可以使用 256 色模式。
- 前景色格式:Esc[38;5;#m
- 背景色模式:Esc[48;5;#m
字符 #
为上图中的数值,例如:\u001b[38;5;10m
,就设置为前景色为绿色
代码示例(Kotlin)
fun main() {
for (i in 0..15) {
for (j in 0..15) {
val number = i * 15 + j
val str = String.format("%3d", number)
print("\u001b[48;5;${number}m $str")
print("\u001b[0m")
}
println()
}
}
输出结果:
参考
如何在命令行中显示五彩斑斓的“黑”_青笔-CSDN博客blog.csdn.net/weixin_37543731/article/details/102322738正在上传…重新上传取消
ANSI转义序列wiki.zhonghuashu.com/wiki/ANSI%E8%BD%AC%E4%B9%89%E5%BA%8F%E5%88%97