Java能否更改自己控制台的代码页?

5
回应https://dev59.com/zHM_5IYBdhLWcg3wt1k0#17177904的结论,应用程序需要调用WriteConsoleWchcp以输出Unicode字符到Windows控制台。
我不想使用JNI,所以WriteConsoleW方法不适用。是否可能让Java应用程序在其内部运行的控制台上调用chcp
据我所知,调用Runtime.exec("cmd.exe", "/c", "chcp", "65001")将创建一个新的控制台,更改其代码页,然后关闭控制台。这意味着现有的控制台不会受到影响。
1个回答

10

基于一种直觉,我尝试了:

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

而且它起作用了!

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接