当前位置: 首页 > 知识库问答 >
问题:

使用Java Runtime调用aspell程序的字符集问题。getRuntime()。执行董事

段干帅
2023-03-14

我试图使用Java Runtime调用linux aspell程序,以在Java中进行pt\u BR拼写检查。getRuntime()。exec()。问题是,它似乎与输入/输出字符编码背道而驰。一些输入字在重音字母位置分成两个字,输出用� 对于重音字母。我可以看到aspell可以在命令管道模式下正确拼写检查pt\u 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流字符集编码有问题,但我不知道具体在哪里设置它们。

共有1个答案

丁成弘
2023-03-14

不要使用Runtume。这是一辆马车。改用ProcessBuilder。或https://github.com/zeroturnaround/zt-exec

 类似资料:
  • 我正在尝试从Java代码运行另一个程序: 我没有文件。在/home/user/myoldfiles/中创建的shp使用BufferedReader获得的命令输出如下所示: 当我在终端(Ubuntu)中运行下一个命令时 它能打印 并成功创建了。shp文件。我在Java代码中做错了什么?

  • 我试图使用PriorityQueue对字符串列表进行排序并删除重复项。最初我使用PriorityQueue,它不会更改顺序。我换了树集后,它起作用了。但是,我想了解优先级队列和定义比较器的问题是什么。想听听解释。

  • 像其它大多数的Java应用程序一样,FreeMarker使用 "UNICODE 文本"(UTF-16)来工作。 不过,也有必须处理 字符集 的情况, 因为它不得不和外界交换数据,这就会使用到很多字符集。 输入的字符集 当 FreeMarker 要加载模板文件(或没有解析的文本文件)时, 那就必须要知道文件使用的字符集,因为文件的存储是原生的字节序列。 可以使用 encoding 配置 来确定字符集

  • 当我调试我的应用程序时,它会显示一个错误,如BUILD FAILED 总时间:1分钟41.485秒执行任务:[: app: GenerateDebugSSource,: app: GenerateDebugAndroidTestSSource,: app: mockableAndroidJar,: app: preareDebugUnitTestDependency] 失败:构建失败,但有例外。

  • 在本书第1篇“第3章安装Git”中,就已经详细介绍了不同平台对本地字符集(如中文)的支持情况,本章再做以简单的概述。 Linux、Mac OS X以及Windows下的Cygwin缺省使用UTF-8字符集。Git运行这这些平台下,能够使用本地语言(如中文)写提交说明、命名文件,甚至使用本地语言命名分支和里程碑。在这些平台上唯一要做的就是对Git进行如下设置,以便使用了本地语言(如中文)命名文件时,

  • 我有一个简单的facelets页面: Foobar bean如下所示: -将有效的输入值推送到模型(如果组件连接到bean属性)。 -执行操作和操作侦听器(如果组件是操作)。 所以在这里,应该执行myCommandButton,不是吗?而组件的执行意味着要执行它的操作?