gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:27:15 25 4
gpt4 key购买 nike

我想使用 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/

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