【发布时间】:2012-11-12 17:52:45
【问题描述】:
This post 给出了一种在Windows 下检索正在运行的进程列表的解决方案。本质上是这样的:
String cmd = System.getenv("windir") + "\\system32\\" + "tasklist.exe";
Process p = Runtime.getRuntime().exec(cmd);
InputStreamReader isr = new InputStreamReader(p.getInputStream());
BufferedReader input = new BufferedReader(isr);
然后读取输入。
它看起来和工作都很棒,但我想知道 tasklist 使用的字符集是否可能不是默认字符集并且此调用可能会失败?
例如this other question about a different executable 表明它可能会导致一些问题。
如果是这样,有没有办法确定合适的字符集是什么?
【问题讨论】:
-
这里有问题吗?你试过了吗?
-
@JimGarrison 我从 FindBugs 收到关于 InputStreamReader 中“依赖默认编码” 的警告,我不知道这是否会导致问题。所以我搜索并发现第二个帖子似乎说它可以。这就是我要检查的。在我的机器上,该代码运行良好。
-
我会将其添加为评论而不是问题,因为我的不确定性相当大。也就是说,我认为像这样的系统实用程序使用的字符集将是操作系统安装的默认语言环境。查询该语言环境并使用它来解释输出流似乎是最通用的方法。但是,如果还存在本地化,则需要对可能更改的字段进行逆向工程,以便将它们解析出来。而这一切都取决于所讨论的实用程序是否一开始就以这种方式变化。
标签: java list character-encoding process