使用Java Runtime.getRuntime()。exec调用aspell程序的charset问题

时间:2015-01-05 14:57:38

标签: java exec inputstream aspell

我正在尝试使用Java Runtime.getRuntime()。exec()在Java中调用用于pt_BR拼写检查的linux aspell程序。问题是它似乎与输入/输出字符编码有关。某些输入字在重音字母位置被分成两个单词,输出显示为 作为重音字母。我可以看到aspell可以在命令管道模式下正确拼写检查pt_BR。设置aspell的代码如下:

String[] aspellCommand = new String[4];
            aspellCommand[0] = "aspell";
            aspellCommand[1] = "-a";
            aspellCommand[2] = "--keymapping=ispell";
            aspellCommand[3] = "--lang=pt_BR";
            String[] envArray = new String[0];

            process = Runtime.getRuntime().exec(aspellCommand, envArray);

            System.out.println(Charset.defaultCharset()); /utf-8

            InputStreamReader ir = new InputStreamReader(process.getInputStream(), "utf-8");
            OutputStreamWriter or = new OutputStreamWriter(process.getOutputStream(), "utf-8");

            aspellOutputStream = new BufferedReader(ir);
            aspellInputStream = new PrintWriter(or,true);

            System.out.println(ir.getEncoding()); /utf-8
            System.out.println(or.getEncoding()); /utf-8

将输入提供给aspell的代码:

aspellInputStream.println(misSpelledWord);

从aspell读取的代码:

String line = aspellOutputStream.readLine();

我怀疑IO流charset编码有问题,但我不知道在哪里设置它们。

1 个答案:

答案 0 :(得分:1)

不要使用有缺陷的Runtime.exec。请改用ProcessBuilder。 https://github.com/zeroturnaround/zt-exec