This post gives a solution to retrieve the list of running processes under Windows. In essence it does:
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);
then reads the input.
It looks and works great but I was wondering if there is a possibility that the charset used by tasklist might not be the default charset and that this call could fail?
For example this other question about a different executable shows that it could cause some issues.
If that is the case, is there a way to determine what the appropriate charset would be?
Can break this into 2 parts:
The windows part
From java you’re executing a Windows command – externally to the jvm in “Windows land”. When java Runtime class executes a windows command, it uses the DLL for consoles & so appears to windows as if the command is running in a console
Q: When I run C:\windows\system32\tasklist.exe in a console, what is the character encoding (“code page” in windows terminology) of the result?
The default system code page is originally setup according to your system locale (type systeminfo to see this or Control Panel-> Region and Language).
The java part:
How do I decode a java byte stream from the windows code page of “x” (e.g. 850 or 1252)?
“” (none) for ISO, “IBM” or “x-IBM” for OEM, “windows-” OR “x-windows-” for Microsoft/Windows.
E.g. ISO-8859-1 or IBM850 or windows-1252
Full Solution:
Thanks for the Q! – was fun.