gpt4 book ai didi

java - 将命令行 unicode 参数传递给 Java 代码

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:25 25 4
gpt4 key购买 nike

我必须将日文命令行参数传递给 Java main 方法。如果我在命令行窗口中键入 Unicode 字符,它会显示“??????”这没问题,但是传递给 java 程序的值也是 '??????'。如何获得命令窗口传递的参数的正确值?下面是将命令行参数提供的值写入文件的示例程序。

public static void main(String[] args) {
String input = args[0];
try {
String filePath = "C:/Temp/abc.txt";
File file = new File(filePath);
OutputStream out = new FileOutputStream(file);
byte buf[] = new byte[1024];
int len;
InputStream is = new ByteArrayInputStream(input.getBytes());
while ((len = is.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}

最佳答案

不幸的是,您无法将非 ASCII 字符可靠地用于使用 Windows C 运行时标准库的命令行应用程序,例如 Java(以及几乎所有非 Windows 特定的脚本语言)。

这是因为它们默认使用特定于语言环境的代码页读取输入和输出,这绝不是 UTF,这与使用 UTF-8 的所有其他现代操作系统不同。

虽然您可以使用 chcp 命令将终端的代码页更改为其他内容,但 chcp 65001 下对 UTF-8 编码的支持在几种可能导致应用程序 fatal error 的方法。

如果您只需要日语,您可以通过将区域设置(区域设置中的“非 Unicode 应用程序的语言”)设置为日本来切换到代码页 932(类似于 Shift-JIS)。但是,对于不在该代码页中的字符,这仍然会失败。

如果你需要在Windows上可靠地通过命令行获取非ASCII字符,你需要直接调用Win32 API函数GetCommandLineW来避开encode-to-system-code-page层.您可能希望使用 JNA 来做到这一点。

关于java - 将命令行 unicode 参数传递给 Java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7660651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com