class File class << self alias_method :original_join, :join end def self.join(*args) new_args = args.collect { |questionableEncoding| join_encoding_fix(questionableEncoding) } self.send(:original_join, new_args) end def self.join_encoding_fix(value) if (value.instance_of?(String)) value = self.convert(value) elsif (value.instance_of?(Array)) value = value.collect { |subValue| join_encoding_fix(subValue) } end value end # # Ruby 1.8.7 requires the iconv library for string encoding # Ruby 1.9.3 uses the default encode method on string. # def self.convert(value) if value.respond_to? :encode value.encode("UTF-8") else require 'iconv' iconv = Iconv.new('ISO-8859-1', 'utf-8') iconv.iconv(value) end end end