我有一个关于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()有什么限制吗?
发布于 2010-04-30 16:29:28
检查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添加了适当的错误检查。
https://stackoverflow.com/questions/2743162
复制相似问题