I have a rogue gem (omniauth) which provides a hash of data containing ASCII-BIT8 strings that I would like to convert into UTF.
How can I force all of the string elements of the hash into UTF, as some kind of rails initializer method? .to_utf8
session[:omniauth] = omniauth.to_utf8
class Hash
def to_utf8
#not really sure what to do here?
end
end
In Ruby 1.9 you can usually just flip the encoding using the encode
method. A wrapper around this that recursively transforms the hash, not unlike symbolize_keys
makes this straightforward:
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With