diff --git a/lib/spring/json.rb b/lib/spring/json.rb index 00f0dca3..c90c251d 100644 --- a/lib/spring/json.rb +++ b/lib/spring/json.rb @@ -13,6 +13,7 @@ module Spring module JSON def self.load(string) + string = string.dup.force_encoding("utf-8") unless string.encoding == Encoding::UTF_8 OkJson.decode(string) end diff --git a/test/unit/json_test.rb b/test/unit/json_test.rb index b9eecc05..3b5eb0ec 100644 --- a/test/unit/json_test.rb +++ b/test/unit/json_test.rb @@ -6,7 +6,12 @@ class JsonTest < ActiveSupport::TestCase assert_equal({"unicode_example"=>"©"}, Spring::JSON.load('{"unicode_example": "\u00A9"}')) end + test 'can decode binary strings with valid UTF8 characters' do + string = "{\"PS1\":\"\xEF\x90\x98 main \xEE\x9E\x91 v3.4.2\"}".b + assert_equal({"PS1"=>" main  v3.4.2"}, Spring::JSON.load(string)) + end + test 'can encode' do assert_equal('{}', Spring::JSON.dump({})) - end + end end