Java可以更改自己的控制台的代码页吗?

时间:2016-08-31 00:34:44

标签: java windows unicode console

回应https://stackoverflow.com/a/17177904/14731的结论,应用程序需要调用WriteConsoleWchcp才能将unicode字符输出到Windows控制台。

我不想使用JNI,因此WriteConsoleW方法已经完成。 Java应用程序是否可以在其内部运行的控制台上调用chcp

据我所知,调用Runtime.exec("cmd.exe", "/c", "chcp", "65001")将创建一个新的控制台,更改其代码页,然后终止控制台。意思是,现有的控制台不会受到影响。

1 个答案:

答案 0 :(得分:4)

基于预感,我尝试了:

ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "chcp", "65001").inheritIO();
Process p = pb.start();
p.waitFor();

它有效!

inheritIO()会导致子进程继承父进程stdout。当chcp修改子stdout的字符编码时,它实际上也会修改父编码。巨大的成功! :)