我想将一个大的 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 的两种方式的起始目录具有相同的起始目录。