JSON with JRuby - not parsing the result to UTF-8

I am using JSON implementation for Ruby in my rails project to parse a JSON string sent by ajax, but I found that although the json string is in UTF-8, the output comes out by default ASCII-8BIT

, see below

jruby-1.6.7 :068 > json_text = '["に到着を待っている"]'
 => "[\"に到着を待っている\"]"
jruby-1.6.7 :069 > json_text.encoding
 => #<Encoding:UTF-8>
jruby-1.6.7 :070 > json_parsed = JSON.parse(json_text)
 => ["\u00E3\u0081\u00AB\u00E5\u0088\u00B0\u00E7\u009D\u0080\u00E3\u0082\u0092\u00E5\u00BE\u0085\u00E3\u0081\u00A3\u00E3\u0081\u00A6\u00E3\u0081\u0084\u00E3\u0082\u008B"]
jruby-1.6.7 :071 > json_parsed.first.encoding
 => #<Encoding:ASCII-8BIT>


I don't want this to slip away, I would like to get the UTF-8 result. Is there a way to fix this? I check the JSON project documentation, finding no encoding options for the method JSON.parse

. Maybe I missed something, how can I do this?

UPDATE: as @ fl00r's notice, this example works fine in MRI but not in JRUBY


source to share

1 answer

This looks like a bug, as it actually works when using the clean version:

jruby-1.6-head :001 > require 'json/pure'
 => true 
jruby-1.6-head :002 > json_text = '["に到着を待っている"]'
 => "[\"に到着を待っている\"]" 
jruby-1.6-head :003 > json_parsed = JSON.parse(json_text)
 => ["に到着を待っている"] 
jruby-1.6-head :004 > json_parsed.first.encoding
 => #<Encoding:UTF-8> 
jruby-1.6-head :005 >


Edit: You just opened a ticket for this ...

Edit 2: Actually this has already been fixed with commit . To install the latest code from json


$ git clone https://github.com/flori/json.git
$ cd json
$ rake jruby_gem
$ jruby -S gem install pkg/json-1.6.6-java.gem




All Articles