回应https://stackoverflow.com/a/17177904/14731的结论,应用程序需要调用WriteConsoleW
或chcp
才能将unicode字符输出到Windows控制台。
我不想使用JNI,因此WriteConsoleW
方法已经完成。 Java应用程序是否可以在其内部运行的控制台上调用chcp
?
据我所知,调用Runtime.exec("cmd.exe", "/c", "chcp", "65001")将创建一个新的控制台,更改其代码页,然后终止控制台。意思是,现有的控制台不会受到影响。
答案 0 :(得分:4)
基于预感,我尝试了:
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "chcp", "65001").inheritIO();
Process p = pb.start();
p.waitFor();
它有效!
inheritIO()
会导致子进程继承父进程stdout
。当chcp
修改子stdout
的字符编码时,它实际上也会修改父编码。巨大的成功! :)