Java可以更改自己的控制台的代码页吗?
问题描述:
回应https://*.com/a/17177904/14731的结论,应用程序需要调用WriteConsoleW
或chcp
以便将unicode字符输出到Windows控制台。Java可以更改自己的控制台的代码页吗?
我不想使用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
的字符编码时,它实际上最终也会修改父代的编码。巨大的成功! :)