2016-08-31 77 views
1

回应https://stackoverflow.com/a/17177904/14731的结论,应用程序需要调用WriteConsoleWchcp以便将unicode字符输出到Windows控制台。Java可以更改自己的控制台的代码页吗?

我不想使用JNI,因此WriteConsoleW方法已经结束。 Java应用程序可能在其运行的控制台上调用chcp

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

回答

3

基于一种预感,我想:

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

和它的工作!

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

相关问题