Возникла задача переконвертировать набор файлов в разных кодировках к одной, utf8. Делать это всё приходилось из ruby 1.8.*, свё было бы просто, т.к. есть замечательная утилка iconv и соответствующий ей класс в руби Iconvю Т.е. всего то надо:
contents = File.open(file).read
output = Iconv.conv('UTF-8', fileEncoding, contents)
file = File.open(file, 'w')
file.write(output)
Да вот только fileEncoding у каждого файла разная, и надо определять её на run time. В 1.9 руби такие возможности появились.
Вот тут я пытался обсуждать этот вопрос:
http://www.ruby-forum.com/topic/163059.
Но меня устроила небольшая утилка tellenc (
http://wyw.dcweb.cn/).
Т.о. получил вот такой скриптик:
require 'iconv'
xmlFileName = "my_xml.xml"
Dir["**/#{xmlFileName}"].each do | file |
if File.exist?(file)
cmd = "tellenc " + file
fileEncoding = 'UTF-8'
IO.popen(cmd) do |command_output|
command_output.each do |line|
fileEncoding = line
break
end
break
end
fileEncoding = fileEncoding[0..-2]
if fileEncoding != 'UTF-8'
contents = File.open(file).read
output = Iconv.conv('UTF-8', fileEncoding, contents)
file = File.open(file, 'w')
file.write(output)
file.close
end
end
end