Ruby script to convert files to utf8

Aug 19, 2008 15:57

Возникла задача переконвертировать набор файлов в разных кодировках к одной, 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

encoding, ruby

Previous post Next post
Up