我正在尝试使用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编码有问题,但我不知道在哪里设置它们。
答案 0 :(得分:1)
不要使用有缺陷的Runtime.exec。请改用ProcessBuilder。 https://github.com/zeroturnaround/zt-exec