通过system()从Ruby调用iconv

通过system()从Ruby调用iconv,ruby,linux,system,iconv,Ruby,Linux,System,Iconv,我的iconv工具有问题。我尝试用这种方式从rake文件调用它: Dir.glob("*.txt") do |file| system("iconv -f UTF-8 -t 'ASCII//TRANSLIT' #{ file } >> ascii_#{ file }") end 但一个文件被部分转换(部分转换的大小:10059092字节,转换前:10081854)。比较这两个文件可以证明并非所有内容都被写入ASCII。当我从shell显式调用这个命令时,它工作得非常好。其他较小

我的iconv工具有问题。我尝试用这种方式从rake文件调用它:

Dir.glob("*.txt") do |file|
  system("iconv -f UTF-8 -t 'ASCII//TRANSLIT' #{ file } >> ascii_#{ file }")
end
但一个文件被部分转换(部分转换的大小:10059092字节,转换前:10081854)。比较这两个文件可以证明并非所有内容都被写入ASCII。当我从shell显式调用这个命令时,它工作得非常好。其他较小文件的转换没有问题。iconv或Ruby的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标准库,从而摆脱系统调用:

require 'iconv'

source_file = 'utf8.txt'
target_file = 'ascii.txt'

File.open(target_file, 'w') do |file|
  File.open(source_file).each_line do |line|
    file.write Iconv.conv('ASCII//TRANSLIT', 'UTF-8', line)
  end
end

添加了适当的错误检查。

Lars我已经尝试过了。系统(“iconv…”)对所有文件返回true。您是否尝试将stderr重定向到某个文件,以查看iconv是否在该文件中输出任何内容?如果尝试从irb中对此特定文件进行系统调用,会发生什么情况?