gpt4 book ai didi

java - 为什么我在 Java 中从 Windows 命令行得到\r\r\n (CR CR LF)?

转载 作者:行者123 更新时间:2023-11-30 06:16:53 26 4
gpt4 key购买 nike

我正在 Java 中运行它:

Runtime.getRuntime().exec("wmic bios get SerialNumber");

当我读取该命令的输出时,行分隔符不是预期的 \r\n ,而是\r\r\n 。该命令在 cmd 上的输出看起来像这样:

C:\Users\pupeno>wmic bios get SerialNumber
SerialNumber
System Serial Number


C:\Users\pupeno>

如果我用 BufferedReader 读取输出:

System.out.println("====================");
BufferedReader output = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = output.readLine()) != null) {
System.out.println(line);
}
System.out.println("====================");

它看起来像这样:

====================
SerialNumber

System Serial Number



====================

如您所见,每行都有一个额外的空行。通过直接阅读 InputStreamReader 来调查它像这样:

try (InputStreamReader inputStreamReader = new InputStreamReader(p.getInputStream())) {
int c;
while ((c = inputStreamReader.read()) != -1) {
String ch = String.valueOf((char) c);
switch(c) {
case 10:
ch = "LF";
break;
case 13:
ch = "CR";
break;
case 32:
ch = "Space";
break;

}
System.out.printf("%3d - %s%n", c, ch);
}
}

我得到这个输出:

 83 - S
101 - e
114 - r
105 - i
97 - a
108 - l
78 - N
117 - u
109 - m
98 - b
101 - e
114 - r
32 - Space
32 - Space
32 - Space
32 - Space
32 - Space
32 - Space
32 - Space
32 - Space
32 - Space
32 - Space
13 - CR
13 - CR
10 - LF
83 - S
121 - y
115 - s
116 - t
101 - e
109 - m
32 - Space
83 - S
101 - e
114 - r
105 - i
97 - a
108 - l
32 - Space
78 - N
117 - u
109 - m
98 - b
101 - e
114 - r
32 - Space
32 - Space
13 - CR
13 - CR
10 - LF
13 - CR
13 - CR
10 - LF

有什么想法为什么会发生这种情况吗?所有 Windows 计算机都会这样吗?

最佳答案

这很奇怪。

如果您从终端运行 wmic 命令并重定向到文件,您将得到 \r\n。如果您通过 Java 进程运行它,您将得到 \r\r\n

如果您直接使用 InputStream 而不使用 InputStreamReader,也会发生这种情况,因此它与 Unicode 无关,这与您被告知的相反在评论中。

在非常快速的测试中,我无法找到另一个表现类似的 Windows 命令。所以看来我们只能将其归因于 wmic 在输出到管道时的特性。

关于java - 为什么我在 Java 中从 Windows 命令行得到\r\r\n (CR CR LF)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48983566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com