Gil*_*ili 1 java windows unicode console
与/sf/answers/1202453311/的结论相呼应,应用程序需要调用WriteConsoleW或chcp才能将unicode字符输出到Windows控制台。
我不想使用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();
Run Code Online (Sandbox Code Playgroud)
而且有效!
inheritIO()使子进程继承父进程的stdout。当chcp修改子代的字符编码时,stdout它实际上最终也会修改父代的编码。巨大的成功!:)