【发布时间】:2014-05-10 00:52:35
【问题描述】:
我需要处理 Windows 上长时间运行的命令的一些文本输出。为了尽早获得这个过程的结果,我使用了 Scala Stream 和 ProcessBuilder 类。
一切运行完美,但我遇到了字符编码问题。
这是我的精简源代码(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();
}
【问题讨论】:
-
看看这篇文章,希望你可以使用 ISO-8859-1 编码器:stackoverflow.com/a/13625541/3248346
-
@I.K.:这行不通,Sascha 的信息流以相反的方式被破坏了。
标签: windows shell scala character-encoding