2010-04-30 61 views
0

我有一個iconv工具的問題。我嘗試從耙文件中這樣稱呼它:通過system調用iconv來自Ruby()

Dir.glob("*.txt") do |file| 
    system("iconv -f UTF-8 -t 'ASCII//TRANSLIT' #{ file } >> ascii_#{ file }") 
end 

但是一個文件被部分地轉化(partialy的大小轉換:10059092個字節,皈依前:10081854)。比較這兩個文件證明並非所有內容都被寫入ASCII。當我從shell中顯式調用這個命令時,它可以很好地工作。其他較小的文件轉換沒有問題。 iconv或Ruby的系統()有什麼限制嗎?

+0

如果您從* irb *內的特定文件嘗試系統調用,會發生什麼情況? – 2010-04-30 08:58:44

回答

0

它是總是一個好主意,檢查system的返回值,以確定它是否成功。

Dir.glob("*.txt") do |file| 
    system("iconv -f UTF-8 -t 'ASCII//TRANSLIT' #{file} >> ascii_#{file}") or 
    puts "iconv failed for file #{file}: #{$?}" 
end 

您也可以嘗試使用語言Iconv標準庫,從而擺脫的系統調用:

​​

添加了相應的錯誤檢查。

+0

Lars我試過這個。系統(「iconv ...」)爲所有文件返回true。 – Sebastian 2010-04-30 08:39:49

+0

您是否嘗試將* stderr *重定向到文件以查看iconv是否輸出任何內容? – 2010-04-30 09:44:42