Java中使用cmd.exe时ESC转义序列失效,游戏输出着色异常
Java控制台着色在cmd.exe失效的解决办法
我在给游戏输出添加着色效果时,遇到了这样的问题:代码在NetBeans中能正常显示带颜色的日志,但在cmd.exe里只会显示类似“<-”的乱码。使用的错误代码如下:
System.out.print("/033[34m[GAME/info]: FPS recorder has start/033[0m"); System.out.print(" /033[37m[GAME/debug]: FPS Print-Out will print every "+ time +".000ms/033[37m");
问题根源与修正
- 转义字符错误:ANSI颜色转义序列的起始必须是**反斜杠**,误用斜杠/会导致cmd无法解析着色指令,直接输出乱码。
- 颜色重置错误:第二行输出末尾用了
/033[37m,应该用\033[0m来重置所有文本格式,避免后续输出继承当前颜色。
修正后的正确代码:
System.out.print("\033[34m[GAME/info]: FPS recorder has started\033[0m"); System.out.print("\n\033[37m[GAME/debug]: FPS Print-Out will print every "+ time +".000ms\033[0m");
cmd.exe额外配置
部分旧版Windows cmd默认不支持ANSI转义序列,需手动开启:
- 临时开启:在cmd中执行以下命令,重启cmd后生效
reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1 - 永久方案:改用Windows Terminal,它原生支持ANSI颜色输出,无需额外设置。
内容的提问来源于stack exchange,提问作者user15990930
相关产品推荐
相关产品推荐

