Windows 如何在scala中解码系统进程输出?

Windows 如何在scala中解码系统进程输出?,windows,shell,scala,character-encoding,Windows,Shell,Scala,Character Encoding,我需要处理windows上长时间运行的命令的一些文本输出。为了尽早得到这个过程的结果,我使用Scala和类 一切运行都完美无缺,但我遇到了字符编码问题 这是我的分条源代码(powershell命令只是真正可执行文件的替代品) 输出schould如下所示: 1a 2äüîß 3end 但仅显示: 1a 2���� 3end 为了在Java中解决这个问题,我将声明InputStream的字符集(Cp850),但在Scala中找不到任何解决方案: public static void main(S

我需要处理windows上长时间运行的命令的一些文本输出。为了尽早得到这个过程的结果,我使用Scala和类

一切运行都完美无缺,但我遇到了字符编码问题

这是我的分条源代码(powershell命令只是真正可执行文件的替代品)

输出schould如下所示:

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();
}

我认为唯一的办法就是使用

因此,不是:

cmd.lines
您必须执行以下操作:

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

我认为唯一的办法就是使用

因此,不是:

cmd.lines
您必须执行以下操作:

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

查看此帖子,希望您可以使用ISO-8859-1编码器:@I.K.:它不起作用,Sascha的流以相反的方式被破坏。查看此帖子,希望您可以使用ISO-8859-1编码器:@I.K.:它不起作用,Sascha的流以相反的方式被破坏。