diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-05-08 21:03:37 -0300 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-05-08 21:03:37 -0300 |
commit | c910388587220e962682b0b9187e79b8f1641c17 (patch) | |
tree | 2bc3b010fc8c5d14952da3336fd554aaca91e8eb /activesupport/lib/active_support/json | |
parent | 8218a46adb5d2c360f54d5680966f9d78f5aa4bc (diff) | |
download | rails-c910388587220e962682b0b9187e79b8f1641c17.tar.gz rails-c910388587220e962682b0b9187e79b8f1641c17.tar.bz2 rails-c910388587220e962682b0b9187e79b8f1641c17.zip |
Revert "Remove unicode character encoding from ActiveSupport::JSON.encode"
This reverts commit 815a9431ab61376a7e8e1bdff21f87bc557992f8.
Conflicts:
activesupport/test/json/encoding_test.rb
Reason: This was causing a regression where the resulting string is always
returning UTF-8. Also it changes the behavior of this method on a stable release.
Fixes #9498.
Diffstat (limited to 'activesupport/lib/active_support/json')
-rw-r--r-- | activesupport/lib/active_support/json/encoding.rb | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/json/encoding.rb b/activesupport/lib/active_support/json/encoding.rb index a50e6524c6..bd2f909ca9 100644 --- a/activesupport/lib/active_support/json/encoding.rb +++ b/activesupport/lib/active_support/json/encoding.rb @@ -122,7 +122,13 @@ module ActiveSupport if string.respond_to?(:force_encoding) string = string.encode(::Encoding::UTF_8, :undef => :replace).force_encoding(::Encoding::BINARY) end - json = string.gsub(escape_regex) { |s| ESCAPED_CHARS[s] } + json = string. + gsub(escape_regex) { |s| ESCAPED_CHARS[s] }. + gsub(/([\xC0-\xDF][\x80-\xBF]| + [\xE0-\xEF][\x80-\xBF]{2}| + [\xF0-\xF7][\x80-\xBF]{3})+/nx) { |s| + s.unpack("U*").pack("n*").unpack("H*")[0].gsub(/.{4}/n, '\\\\u\&') + } json = %("#{json}") json.force_encoding(::Encoding::UTF_8) if json.respond_to?(:force_encoding) json |