mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user