module ActionDispatch::Http::Parameters
def normalize_encode_params(params)
you'll get a weird error down the road, but our form handling
TODO: Validate that the characters are UTF-8. If they aren't,
and UTF-8 encode both keys and values in nested Hash.
Convert nested Hash to HashWithIndifferentAccess
def normalize_encode_params(params) if params.is_a?(String) return params.force_encoding(Encoding::UTF_8).encode! elsif !params.is_a?(Hash) return params end new_hash = {} params.each do |k, v| new_key = k.is_a?(String) ? k.dup.force_encoding(Encoding::UTF_8).encode! : k new_hash[new_key] = case v when Hash normalize_encode_params(v) when Array v.map! {|el| normalize_encode_params(el) } else normalize_encode_params(v) end end new_hash.with_indifferent_access end