В Ruby 1.9 обычно можно просто перевернуть кодировку, используя метод encode
.Обертка вокруг этого, которая рекурсивно преобразует хеш, мало чем отличается от symbolize_keys
, делает это простым:
class Hash
def to_utf8
Hash[
self.collect do |k, v|
if (v.respond_to?(:to_utf8))
[ k, v.to_utf8 ]
elsif (v.respond_to?(:encoding))
[ k, v.dup.encode('UTF-8') ]
else
[ k, v ]
end
end
]
end
end