这是一个简单的Java应用程序,可在Windows上显示默认代码页:
package doscommand;
import java.io.IOException;
import java.io.InputStream;
public class DosCommand {
public static void main(String[] args) throws IOException {
InputStream in = Runtime.getRuntime().exec("chcp.com").getInputStream();
int ch;
StringBuilder chcpResponse = new StringBuilder();
while ((ch = in.read()) != -1) {
chcpResponse.append((char) ch);
}
System.out.println(chcpResponse); // For example: "Active code page: 437"
}
}
在我的Windows 10计算机上,此应用程序始终显示“活动代码页:437” ,因为 Cp437 是默认设置,并且Runtime.getRuntime().exec()
启动一个新的{{ 1}}(运行Process
时。
是否可以创建一个Java应用程序,而不是在其中运行代码的现有命令提示符窗口中显示当前活动的代码页?
我希望能够通过命令提示符执行以下操作:
chcp.com
How do you specify a Java file.encoding value consistent with the underlying Windows code page?提出了类似的问题,尽管在这种情况下,OP正在寻求非Java解决方案。
我更喜欢仅使用Java的解决方案,但可以选择:
答案 0 :(得分:0)
该解决方案仅是一行代码。 Using JNA,Windows API函数GetConsoleCP()
返回的值提供了控制台的活动代码页:
import com.sun.jna.platform.win32.Kernel32;
public class JnaActiveCodePage {
public static void main(String[] args) {
System.out.println("" + JnaActiveCodePage.getActiveInputCodePage());
}
/**
* Calls the Windows function GetConsoleCP() to get the active code page using JNA.
* "jna.jar" and "jna-platform.jar" must be on the classpath.
*
* @return the code page number.
*/
public static int getActiveInputCodePage() {
return Kernel32.INSTANCE.GetConsoleCP();
}
}