呼应 https://stackoverflow.com/a/17177904/14731 的结论,应用程序需要调用 WriteConsoleW
或 chcp
才能将 unicode 字符输出到 Windows 控制台。
我不想使用 JNI,所以 WriteConsoleW
方法已经过时了。 Java 应用程序是否可以在其运行的控制台上调用 chcp
?
据我所知,调用 Runtime.exec("cmd.exe", "/c", "chcp", "65001")将创建一个新控制台,更改其代码页,然后终止控制台。也就是说,现有控制台不会受到影响。
最佳答案
基于直觉,我试过:
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "chcp", "65001").inheritIO();
Process p = pb.start();
p.waitFor();
成功了!
inheritIO()
使子进程继承父进程的 stdout
。当 chcp
修改子级 stdout
的字符编码时,它实际上最终也修改了父级的编码。巨大的成功! :)
关于java - Java能改自己控制台的codepage吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39239033/