在java

时间:2016-02-01 21:58:55

标签: java windows character-encoding

我一直在从Java读取Windows命令行的输出时遇到问题,我正在使用Runtime.getRuntime().exec()

我简化了我的测试用例:我有一个名为お読みください.txt的文件,我执行以下command cmd /c dir C:/PATH

注意:实际的命令是tasklist,但只要我使用Runtime.getRuntime(),它就会得到相同的结果.exec()

String[] cmd = new String[]{ "cmd", "/c", "dir" };
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader stdInput = 
    new BufferedReader(new InputStreamReader(process.getInputStream(), StandardCharsets.UTF_8));
String s, result = "";
while ((s = stdInput.readLine()) != null) {
    if (!s.isEmpty()) {
        result += s + "\n";
    }
}
System.out.println(result);

我得到 ǂ݂ .txt

我试过没有charset,默认和其他的;在测试了所有字符集之后,我得到了我正在寻找的那个: Shift_JIS

这一定是因为我已将非Unicode应用程序的语言设置为日语。 systeminfo.exe为区域配置说 ja;日语

我可以简单地使用Shift_JIS来阅读,但它只能在我的电脑上使用。那么其他系统配置呢?

问题是,如何才能获得正确的charset来读取Windows控制台输出?

1 个答案:

答案 0 :(得分:0)

基于What encoding/code page is cmd.exe using?

的答案

您可以执行“cmd / c chcp”来获取当前代码页。使用Code Page Identifiers查找映射Java编码名称。