gpt4 book ai didi

Java 运行时 exec() 无法正确转义字符

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

这之前可能已经回答过,但那是关于 unicode 的,我认为这不是 unicode(它是 ASCII,所以...)。

当我在我的终端中执行这个时,没有任何问题

vboxmanage setextradata "Test Machine" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 2222

但是当我在 Java 中使用以下内容时

Runtime.getRuntime().exec("vboxmanage setextradata \"Test Machine\" \"VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort\" 2222");

它返回一个错误:未注册的 vm '"TestMachine"'

参数里面有空格的也一样,比如Test\Machine,那么它不会对空格进行转义。

现在我认为这与字符编码有关,但我看不到任何设置 o_O 的选项

最佳答案

您一次调用程序及其参数,这有效地将整个字符串插入处理环境(希望最好)。

在 Windows 系统中,操作系统会以不同的方式处理可执行文件和参数,将它们全部放在同一个字符串中只需要您选择适合环境的完美字符串(我知道其中有两个) 可以重新解析为参数列表。更好的解决方案是使用

Runtime.exec(new String[] {"vboxmanage", "setextradata", "Test Machine", "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort", "2222"});

对应于运行时的

public Process exec(String[] cmdarray)
throws IOException

充其量,使用一个字符串方法,您最终会发现如何提示和转义参数,这样它们就不会被视为可执行文件名称的一部分,但随后您会遇到一个新问题,即它们全部作为一个参数传递给可执行文件。一旦你根据环境修复了它,你会发现你的引号没有从参数中删除(导致像“2222”这样的参数)或者 Window 的半损坏参数解析将首先解析空白(导致像 ("Test) 这样的参数。这没有意义,这就是为什么有不止一种 exec 方法可用。

关于Java 运行时 exec() 无法正确转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5969724/

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