gpt4 book ai didi

windows - 如何解码scala中的系统进程输出?

转载 作者:可可西里 更新时间:2023-11-01 10:06:10 25 4
gpt4 key购买 nike

我需要处理在 Windows 上长时间运行的命令的一些文本输出。为了尽早获得此过程的结果,我正在使用 Scala StreamProcessBuilder类。

一切正常,但我遇到了字符编码问题

这是我精简的源代码(powershell 命令只是对真实可执行文件的替代)。

import scala.sys.process._

object CP850TEST extends Application{
val cmd = Seq("powershell", "-command", "echo 1a; Start-Sleep -s 1; echo 2äüîß; Start-Sleep -s 1 ; echo 3end")
val lines:Stream[String] = cmd.lines
lines.foreach(println)
}

输出应该是这样的:

1a
2äüîß
3end

但仅显示:

1a
2����
3end

为了在 Java 中解决这个问题,我会声明 InputStream 的字符集 (Cp850),但我在 Scala 中找不到任何解决方案:

public static void main(String[] args) throws IOException {
ProcessBuilder pb = new ProcessBuilder("powershell", "-command", "echo 1a; Start-Sleep -s 1; echo 2äüîß; Start-Sleep -s 1 ; echo 3end");
Process process = pb.start();
Scanner scanner = new Scanner(process.getInputStream(), "Cp850");
while ( scanner.hasNextLine() ) {
String s = scanner.nextLine();
System.out.println( s );
}
scanner.close();
}

最佳答案

我认为唯一的方法是使用 ProcessIO .

所以代替:

cmd.lines

你必须做:

cmd.run(new ProcessIO(
i => i.close,
o =>
Source.fromInputStream(o, "Cp850").getLines.foreach { line =>
// your callback here
},
e => e.close))

关于windows - 如何解码scala中的系统进程输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22748774/

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