当前位置: 首页 > 面试题库 >

Java Runtime exec()无法正确转义字符

祁俊喆
2023-03-14
问题内容

这可能之前已经被回答过了,但是那是关于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系统中,操作系统着重于以不同的方式处理可执行文件和参数,并将它们全部放在同一字符串中只是要求您选择环境(我知道其中有两个)可以重新使用的理想字符串。
-parse进入参数列表。更好的解决方案是使用

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

对应于 Runtime's

public Process exec(String[] cmdarray)
         throws IOException

充其量,使用一个字符串方法,您最终将找到如何提示和转义参数,以免将它们视为可执行文件名称的一部分,但是随后您将遇到一个新问题,即它们被传递了。全部作为可执行文件的一个参数。一旦根据环境修复了该问题,您要么会发现自己的引号没有从参数中剥离(导致出现诸如“
2222”之类的参数),要么发现Window的半连续参数解析将首先在空白处进行解析(导致出现诸如(“
Test)之类的参数。这没有意义,这就是为什么有不止一种exec方法可用的原因。



 类似资料:
  • 问题内容: 为了回答这个问题,我设法通过转义反斜杠来使字符串成为转义字符。 当我尝试将其概括为转义所有转义的字符时,它似乎无能为力: 但是对于特定的转义字符使用相同的方法,它确实起作用: 有一般的方法可以做到这一点吗?应包括,,,等。 问题答案: 使用r’text’将字符串定义为raw,如下面的代码所示:

  • 问题内容: 例如,\ b退格键打印为四边形(在下面的示例中显示为[])。但是\ n换行符还可以。 我在Vista(Pro),Python 2.7下运行 香港专业教育学院试图谷歌搜索这个问题,并因此找不到任何相关的东西,这似乎很奇怪,我不知道是否有一些设置或其他可能在我的设置中是错误的。不知道要寻找什么。 问题答案: 我做错了什么或应该寻找什么? 期望退格(特别是工作)是否合理? 不,IDLE不支持

  • 我有一个Spring Boot应用程序正在尝试使用Spring Cloud Gateway访问一些微服务。我使用的代码基于以下位置的说明: 基本上,我的应用程序复制了该站点上提供的代码,包括作者创建的两个测试微服务: 和 我的实际网关代码与作者的类似: package com . betterjavacode . API gateway demo . config; 不幸的是,当我运行此应用程序时

  • 在控制台上获取以下第一行: 35026:1978749]CoreText注意:客户端请求的名称“.SFNS-Regular”,它将获得Times-Roman而不是预期的字体。所有系统UI字体访问都应通过适当的API,如CTFontCreateUIFontForLanguage()或[NSFont systemFontOfSize:]。2021 06月09日00:00:46.808 java[350

  • 问题内容: 我有以下格式的json响应。 我相信json.net可以处理转义字符,因此我使用了以下代码将其反序列化为字典集合。 但是,此json解析引发异常“无效的属性标识符字符:。路径’[0]’,第1行,位置2”。我们可以通过处理json响应字符串来解决此问题吗? 问题答案: 在反序列化过程之前尝试。

  • 问题内容: 我正在从一个文件中读取,该文件在一行上读取所有内容: 然后,我的扫描程序会从文件中读取该文件并将其放入字符串中: 现在,我希望输出为: 但是相反,我得到了与输入完全相同的东西。也就是说,每个\ n都包含在输出中,并且所有内容都在一行中而不是单独的行中。 我以为Scanner能够正确读取转义字符,但它会像\\ n一样将其复制到String上。 问题答案: 如果写的是文件,则不能使用,因为