如何从 Windows 上的 Java 控制台应用程序确定当前活动的代码页?
How to determine the currently active code page from a Java console application on Windows?
这是一个简单的 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 机器上,此应用程序始终显示 "Active code page: 437",因为 Cp437 是默认设置,并且Runtime.getRuntime().exec()
在 运行 chcp.com
时开始新的 Process
。
是否可以创建一个 Java 应用程序来显示现有 命令提示符 的 当前活动代码页 window 其中代码为 运行?
我希望能够通过 命令提示符 执行类似的操作:
chcp 1252
java -jar "D:\NB82\DosCommand\dist\DosCommand.jar" REM Shows current code page is "1252".
chcp 850
java -jar "D:\NB82\DosCommand\dist\DosCommand.jar" REM Shows current code page is "850".
How do you specify a Java file.encoding value consistent with the underlying Windows code page? 问了一个类似的问题,尽管在那种情况下 OP 正在寻求非 Java 解决方案。
我更喜欢仅 Java 的解决方案,但作为替代方案:
- 是否可以使用 JNI 调用一些 C/C++/C# 代码来访问 Windows API?调用的代码只需要 return 活动代码页的数值。
- 我会接受一个令人信服地认为它无法完成的答案。
解决方案原来只是一行代码。 Using JNA, the value returned by the Windows API function 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();
}
}
这是一个简单的 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 机器上,此应用程序始终显示 "Active code page: 437",因为 Cp437 是默认设置,并且Runtime.getRuntime().exec()
在 运行 chcp.com
时开始新的 Process
。
是否可以创建一个 Java 应用程序来显示现有 命令提示符 的 当前活动代码页 window 其中代码为 运行?
我希望能够通过 命令提示符 执行类似的操作:
chcp 1252
java -jar "D:\NB82\DosCommand\dist\DosCommand.jar" REM Shows current code page is "1252".
chcp 850
java -jar "D:\NB82\DosCommand\dist\DosCommand.jar" REM Shows current code page is "850".
How do you specify a Java file.encoding value consistent with the underlying Windows code page? 问了一个类似的问题,尽管在那种情况下 OP 正在寻求非 Java 解决方案。
我更喜欢仅 Java 的解决方案,但作为替代方案:
- 是否可以使用 JNI 调用一些 C/C++/C# 代码来访问 Windows API?调用的代码只需要 return 活动代码页的数值。
- 我会接受一个令人信服地认为它无法完成的答案。
解决方案原来只是一行代码。 Using JNA, the value returned by the Windows API function 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();
}
}