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

2024-03-31

呼应结论https://stackoverflow.com/a/17177904/14731 https://stackoverflow.com/a/17177904/14731,应用程序需要调用WriteConsoleW or chcp为了将 unicode 字符输出到 Windows 控制台。

我不想使用 JNI 所以WriteConsoleW方法已经出来了。Java应用程序是否可以调用chcp在它运行的控制台上?

据我所知,调用Runtime.exec("cmd.exe", "/c", "chcp", "65001") http://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#exec-java.lang.String:A-将创建一个新控制台,更改其代码页,然后终止该控制台。这意味着现有的控制台不会受到影响。


基于预感,我尝试了:

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

成功了!

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java可以改变自己控制台的代码页吗? 的相关文章

随机推荐