windows - Windows 上的 Java Runtime Exec 因参数中的 Unicode 而失败

标签 windows unicode runtime.exec

我想使用 Java 的运行时执行程序启动浏览器并加载网页。确切的调用如下所示:

String[] explorer = {"C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE", 
    "-noframemerging", 
    "C:\\ ... path containing unicode chars ... \\Main.html"};
Runtime.getRuntime().exec(explorer);

在我的例子中,路径包含 "\u65E5\u672C\u8A9E",字符日本语。

显然这是一个 java 错误: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4947220

我的问题是:是否有仅使用 Java 就可以完成的可行解决方法?似乎可以为此编写一个 JNI 库,但我想尽可能避免这种情况。我已尝试将路径 URI 编码为 ascii 并将命令写入批处理文件,但没有成功。

最佳答案

在提到的Java bug page您会发现一种变通方法,该变通方法据报道可以使用 ProcessBuilder 并将参数包装在环境变量中。这是来自 Parag Thakur 的源代码:

String[] cmd = new String[]{"yourcmd.exe", "Japanese CLI argument: \ufeff\u30cb\u30e5\u30fc\u30b9"};        
Map<String, String> newEnv = new HashMap<String, String>();
newEnv.putAll(System.getenv());
String[] i18n = new String[cmd.length + 2];
i18n[0] = "cmd";
i18n[1] = "/C";
i18n[2] = cmd[0];
for (int counter = 1; counter < cmd.length; counter++)
{
    String envName = "JENV_" + counter;
    i18n[counter + 2] = "%" + envName + "%";
    newEnv.put(envName, cmd[counter]);
}
cmd = i18n;

ProcessBuilder pb = new ProcessBuilder(cmd);
Map<String, String> env = pb.environment();
env.putAll(newEnv);
final Process p = pb.start();

关于windows - Windows 上的 Java Runtime Exec 因参数中的 Unicode 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1876507/

相关文章:

java - Java 中 Windows NFS 的 Runtime.getRuntime().exec() 问题

java - 当他的流(错误和输入流)终止时,java进程是否终止?

c++ - glutMouseFunc 上没有滚轮回调

c# - 切换按钮两种方式绑定(bind)不起作用(通用 Windows 平台)

python - 导入时出现 UnicodeDecodeError (tweepy)

python - 一个对象的 Unicode 表示回到一个对象(在 python 中)

java - 如何在Java中创建一个新的进程?

Windows 上的 Java/MongoDB 消息长度错误,但 Linux 上没有

python - 我们如何在 Linux 中使用 sleep() 来保持合理的 CPU 使用率,同时仍然具有良好的计时精度?

c++ - 通过 C++ 在控制台中使用 Unicode 字符