如何从java

时间:2017-07-13 12:47:08

标签: java utf-8 character-encoding windows-10 windows-console

我尝试在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>输出到外部文件。我很高兴知道这个问题的工作(最好是原生的)解决方案。

2 个答案:

答案 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”。

请参阅How do I print escape characters in Java