从Ruby 1.8.7到系统调用iconv将文件从utf-16转换为utf-8

这是我得到的:

path_js = 'path/to/a/js/file.js' path_new_js = 'path/where/the/converted/file/should/go.js' puts('iconv -f utf-16le -t utf-8 ' + path_js + ' > ' + path_new_js) system('iconv -f utf-16le -t utf-8 ' + path_js + ' > ' + path_new_js) 

puts语句的输出是:

 iconv -f utf-16le -t utf-8 path/to/1-1-2_E1_MC105.js > compiled/path/to/1-1-2_E1_MC105.js 

如果我在终端中复制粘贴完全相同的行,则转换会成功进行,但是当它在我的ruby脚本中运行时,新文件的创建编码与原始文件相同(在本例中为utf-16)。 关于什么是缺失/错误的任何想法?

干杯!

更新:我使用的是Mac OS X Snow Leopard,我使用ruby 1.8.7(系统默认)和1.9.2(使用RVM安装)尝试了相同的脚本。 我也尝试了以下内容:

 f = File.open(path_js,'rb') js = f.read f.close new_js = Iconv.conv('utf-8', 'utf-16', js) File.open(path_new_js,'w'){|f| f.write(new_js)} 

结果相同:S

这应该相当于直接运行命令,所以要确保它实际上正确运行。 如果执行中出错, system将返回false

您还可以使用Ruby中的iconv库直接执行它,而不需要命令行工具。 这可能会提供更多控制。