我尝试在Windows上将彩色文本打印到控制台,并且需要使用转义字符\u001B
。
在我的IntelliJ IDEA中,代码System.out.print("\u001B[92m Hello!"):
打印绿色文本"你好"!
不幸的是,如果我从CMD运行我的应用程序,它对控制台不起作用。我尝试使用ASCII和UTF-8编码,但它没有帮助。
例如上述及以下片段
try (OutputStreamWriter writer = new OutputStreamWriter(
System.out,
StandardCharsets.UTF_8))
{
writer.write("\u001B[92m Hello!");
}
打印类似<question mark in rectangle>[92m Hello!
信息:对于最后一个示例,我使用命令 chcp 65001 将控制台代码页更改为Utf-8,我还运行带有-Dfile.encoding=UTF-8
标志的java应用程序启用,因此Java和控制台使用相同的编码。结果是一样的。
有趣的是,因为我可以从.bat脚本打印彩色文本。例如,任务可以由echo <ESC>[92m Hello!
完成,其中<ESC>
是一个转义字符,可以使用键盘组合键入Notepad ++ Alt + 0 + 2 + 7 。
更有趣的是,Java正确地将转义字符<ESC>
输出到外部文件。我很高兴知道这个问题的工作(最好是原生的)解决方案。
答案 0 :(得分:1)
ANSI / VT100转义序列不适用于所有终端。 IntelliJ默认显然理解它们,但是为了让它在常规Windows CMD.exe窗口上工作,您需要enable the support first。
另见How to make win32 console recognize ANSI/VT100 escape sequences?
答案 1 :(得分:0)
这个问题的描述让我感到困惑,但是如果你只是想在CMD上打印“\”字符,你只需要逃避它:
例如。如果要打印“\ x”,则需要将其写为“\\ x”。