我想將一個大的csv文件從gb2312編碼轉換爲UTF-8編碼。 這裏是我使用的代碼:在java應用程序內執行iconv
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的兩種方式的起始目錄具有相同的起始目錄。
請注意,您不應該需要從Java調用'iconv',因爲該功能是內置在Java中(除非您需要一種罕見的,不受支持的編碼或其音譯功能)。這有助於避免[Runtime.exec()混亂](http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html)。 – 2011-05-31 10:51:01