mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
parent
f37a2ea84c
commit
49824e8ad6
2 changed files with 14 additions and 7 deletions
|
@ -1,4 +1,4 @@
|
|||
# encoding: binary
|
||||
# encoding: utf-8
|
||||
require 'active_support/core_ext/array/wrap'
|
||||
require 'active_support/core_ext/hash/except'
|
||||
require 'active_support/core_ext/hash/slice'
|
||||
|
@ -97,12 +97,14 @@ module ActiveSupport
|
|||
|
||||
def escape(string)
|
||||
string = string.dup.force_encoding(::Encoding::BINARY) if string.respond_to?(:force_encoding)
|
||||
json = '"' + string.gsub(escape_regex) { |s| ESCAPED_CHARS[s] }
|
||||
json.gsub(/([\xC0-\xDF][\x80-\xBF]|
|
||||
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}/, '\\\\u\&')
|
||||
} + '"'
|
||||
s.unpack("U*").pack("n*").unpack("H*")[0].gsub(/.{4}/n, '\\\\u\&')
|
||||
}
|
||||
%("#{json}")
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -75,8 +75,13 @@ class TestJSONEncoding < Test::Unit::TestCase
|
|||
|
||||
def test_utf8_string_encoded_properly_when_kcode_is_utf8
|
||||
with_kcode 'UTF8' do
|
||||
assert_equal '"\\u20ac2.99"', ActiveSupport::JSON.encode('€2.99')
|
||||
assert_equal '"\\u270e\\u263a"', ActiveSupport::JSON.encode('✎☺')
|
||||
result = ActiveSupport::JSON.encode('€2.99')
|
||||
assert_equal '"\\u20ac2.99"', result
|
||||
assert_equal(Encoding::UTF_8, result.encoding) if result.respond_to?(:encoding)
|
||||
|
||||
result = ActiveSupport::JSON.encode('✎☺')
|
||||
assert_equal '"\\u270e\\u263a"', result
|
||||
assert_equal(Encoding::UTF_8, result.encoding) if result.respond_to?(:encoding)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue