将Windows命令行输出从Cp1252转换为可比较的String

时间:2013-11-28 18:50:32

标签: java utf-8 character-encoding

我正在执行Windows命令,需要解析结果输出,并将部分文本与先前存储在java代码中的字符串进行比较。

但显然,charset不匹配会阻止等于返回true。

这是我的代码:

    ProcessBuilder pb = new ProcessBuilder();
    pb.command("systeminfo");
    Process shell = pb.start();
    InputStream shellIn = shell.getInputStream();


    InputStreamReader reader = new InputStreamReader(shellIn, "Cp1252");
    BufferedReader br = new BufferedReader(reader);

    String sCurrentLine;
    while((sCurrentLine = br.readLine()) != null) {

        // ... omitting parse of sCurrentLine for brevity
        System.out.println("DOS String:" + sCurrentLine);
        System.out.println("JAVA String: "+ Versão");
        System.out.println("Versão".equals(sCurrentLine));
    }

我的输出将是:(命令行窗口):

    Windows String: Versão
    JAVA String: VersÒo
    false

到文本文件:

    Windows String: VersÒo
    JAVA String: Versão
    false

我在stackoverflow中发现了几个类似的问题,但没有一个为我工作。

converting String from Windows charset to UTF 8 in Java

Converting from Windows 1252 to UTF8 in Java: null characters with CharsetDecoder/Encoder

How to parse a string that is in a different encoding from java

Setting the default Java character encoding?

How to Find the Default Charset/Encoding in Java?

1 个答案:

答案 0 :(得分:1)

在大多数情况下,命令行不使用标准的Windows代码页,而是使用旧的DOS代码页。根据{{​​3}},您可以在命令行中找到使用命令chcp的内容,以找出它在您的环境中使用的内容。在我的计算机上,此命令显示850。因此,我认为这是使用的代码页,因此您应该在调用new InputStreamReader时使用它。

但是,我不确定这是否适用于所有语言环境中的所有Windows版本。实际上,我从未使用日语,阿拉伯语,中文或韩语Windows。