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

时间:2011-08-19 14:27:37

标签: ruby utf-8 utf-16 iconv

这是我得到的:

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

1 个答案:

答案 0 :(得分:0)

这应该等同于直接运行命令,因此请确保它实际上正确运行。如果执行中出现错误,system将返回false

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