以字符集安全的方式获取 Windows 上的进程列表

2024-05-01

这个帖子 https://stackoverflow.com/questions/54686/how-to-get-a-list-of-current-open-windows-process-with-java给出了一个在 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);

然后读取输入。

它看起来和工作都很好,但我想知道任务列表使用的字符集是否有可能不是默认字符集并且此调用可能会失败?

例如关于不同可执行文件的另一个问题 https://stackoverflow.com/questions/457655/java-charset-and-windows表明它可能会导致一些问题。

如果是这种情况,有没有办法确定适当的字符集是什么?


可以将其分为两部分:

  1. 窗户部分
    从 java 中,您正在执行 Windows 命令 - 在“Windows land”中的 jvm 外部。当 java Runtime 类执行 Windows 命令时,它使用控制台的 DLL,因此在 Windows 中显示该命令就像在控制台中运行一样
    问:当我在控制台中运行 C:\windows\system32\tasklist.exe 时,结果的字符编码(Windows 术语中的“代码页”)是什么?

    • 不带参数的 windows“chcp”命令给出控制台的活动代码页号(例如,Multilingual-Latin-1 为 850,Latin-1 为 1252)。看Windows 微软代码页 http://msdn.microsoft.com/en-us/goglobal/bb964654.aspx, Windows OEM 代码页 http://msdn.microsoft.com/en-us/goglobal/bb964655, Windows ISO 代码页 http://msdn.microsoft.com/en-us/goglobal/bb964656
      默认系统代码页最初是根据您的系统区域设置设置的(键入 systeminfo 查看此内容或控制面板 -> 区域和语言)。
    • Windows操作系统/.NET功能getACP() http://msdn.microsoft.com/en-us/library/dd318070%28VS.85%29.aspx还提供了此信息
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以字符集安全的方式获取 Windows 上的进程列表 的相关文章

随机推荐