如何解决在Java应用程序中执行iconv
| 我想将较大的csv文件从gb2312编码转换为UTF-8编码。 这是我使用的代码:Process process = Runtime.getRuntime().exec(
String.format(\"iconv -c -f %1$s -t %2$s %3$s > %4$s\",sourceEncoding,targetEncoding,source,target));
process.waitFor();
问题是proccess.waitFor()方法永远不会结束。看起来iconv正在等待我的输入,例如从命令行调用它并且不给出参数。但是从另一个会话的终端。我可以看到iconv使用正确的参数运行。
root 16729 0.0 0.1 164076 812 pts/0 S+ 23:00 0:00 iconv -c -f gb2312 -t utf-8 20110525.csv > 20110525.utf8.csv
如果我从终端手动输入命令“ iconv -c -f gb2312 -t utf-8 20110525.csv> 20110525.utf8.csv \”,则该命令将正确运行。但是,如果我从java调用它,它将无法正常工作。
我调用iconv的两种方式的起始目录具有相同的起始目录。
解决方法
重定向符号(
>
)是shell / cmd功能,不是Java,在从Java执行进程时不能使用它。
您可以获取进程的OutputStream(InputStream is = process.getInputStream()
)并将其保存到文件。
, 如MByD所说,重定向符号是一个shell功能。
但是,除了获取OutputStream之外,您还可以从Java执行bash:
... .exec(\"bash -c \'iconv -c -f gb2312 -t utf-8 20110525.csv > 20110525.utf8.csv\'\")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。