我输入一些参数,比如-D你好=你好,并调用一个类,
java文件如下:
public class Test {
public static void main(String[] args) throws Exception {
for(String name :args){
System.out.println(name);
}
}
}
打印结果:
-D??=??
如何解决这个问题?
答案 0 :(得分:2)
看起来像一个干净的方式是不可能的: Passing command line unicode argument to Java code
不幸的是,您无法可靠地使用非ASCII字符 使用Windows C运行时的stdlib的命令行应用程序,如Java (以及几乎所有非Windows特定的脚本语言)。
这是因为他们使用a读取输入和输出 特定于语言环境的代码页,默认情况下,它不是UTF,不像 所有其他使用UTF-8的现代操作系统。
虽然您可以将终端的代码页更改为其他内容 使用chcp命令,支持chcp下的UTF-8编码 65001在某些方面被打破,可能导致应用程序死亡。
如果您只需要日语,您可以切换到代码页932(类似 通过设置您的语言环境('非Unicode的语言)到Shift-JIS 在区域设置中的应用程序)到日本。这仍然会失败 但是对于不在该代码页中的字符。
如果需要通过命令行获取非ASCII字符 在Windows上可靠地,您需要调用Win32 API函数 GetCommandLineW直接避免编码到系统代码页 层。可能你想用JNA做到这一点。