java - Java能改自己控制台的codepage吗?

标签 java windows unicode console

呼应 https://stackoverflow.com/a/17177904/14731 的结论,应用程序需要调用 WriteConsoleWchcp 才能将 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();

成功了!

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

关于java - Java能改自己控制台的codepage吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39239033/

相关文章:

java - android error org.json.JSONException : Value <! java.lang.String类型的DOCTYPE无法转换为JSONObject

c++ - 工作线程在 DLL(但不是 .exe)中的静态对象被破坏之前被强制终止?

java - 字符串的正则表达式验证

c++ - EnterCriticalSection 似乎没有阻塞

c - 在 C 中调用函数时出现段错误

非英文字符的java slugify字符串

c++ - 如何在 C++ 中读取用 utf-8 编码的 java unicode 字节字符串

python - 这是确保 python unicode "string"以 utf-8 编码的最佳方法吗?

java - URL 中带点的 Spring MVC 资源映射

java - 为什么@PostConstruct 会导致NullPointerException?