通过system()从Ruby调用iconv
我的iconv工具有问题。我尝试用这种方式从rake文件调用它:通过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显式调用这个命令时,它工作得非常好。其他较小
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中对此特定文件进行系统调用,会发生什么情况?