Skip to content
Browse files

Convert encoding before escaping

  • Loading branch information...
1 parent 1d71a34 commit 8aaed3d456bad8a0bdf4789b69b41f7d817f981c @jeremy jeremy committed Apr 26, 2009
Showing with 6 additions and 5 deletions.
  1. +6 −5 activesupport/lib/active_support/json.rb
View
11 activesupport/lib/active_support/json.rb
@@ -28,13 +28,14 @@ module Encoding #:nodoc:
}
def self.escape(string)
- json = '"' + string.gsub(escape_regex) { |s| ESCAPED_CHARS[s] }
- json.force_encoding('ascii-8bit') if respond_to?(:force_encoding)
- json.gsub(/([\xC0-\xDF][\x80-\xBF]|
+ string = string.dup.force_encoding(::Encoding::BINARY) if string.respond_to?(:force_encoding)
+ 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}/, '\\\\u\&')
+ }
+ %("#{json}")
end
end

0 comments on commit 8aaed3d

Please sign in to comment.
Something went wrong with that request. Please try again.