将Cp1252的Windows命令行输出转换为类似的字符串



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

但显然,字符集不匹配阻止了equals返回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发现了一些类似的问题,但没有一个对我有效

在Java 中将字符串从Windows字符集转换为UTF 8

在Java中从Windows 1252转换为UTF8:使用CharsetDecoder/Encoder 的空字符

如何解析与java不同编码的字符串

设置默认的Java字符编码?

如何在Java中查找默认字符集/编码?

在大多数情况下,命令行不使用标准的Windows代码页,而是使用旧的DOS代码页。根据cmd.exe使用的编码/代码页是什么?,您可以使用命令行上的命令chcp来找出它在您的环境中使用的是哪一个。在我的计算机上,此命令显示850。因此,我假设这是所使用的代码页,因此您应该在对new InputStreamReader的调用中使用它。

但是,我不确定这是否适用于所有地区的所有版本的Windows。事实上,我从未使用过日语、阿拉伯语、中文或韩语窗口。

最新更新