json icon indicating copy to clipboard operation
json copied to clipboard

parse a to_json result return a different value

Open minostro opened this issue 9 years ago • 0 comments

I have two machines, A and B. A is a linux box which returns the right value, B is an osx (yosemite) box which returns the wrong value:

A

irb(main):016:0> JSON.parse(["£60.00"].to_json)
=> ["£60.00"]
irb(main):017:0> JSON::VERSION
=> "1.6.3"
irb(main):018:0>  RUBY_DESCRIPTION
=> "ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux]"
irb(main):019:0> JSON.generator
=> JSON::Ext::Generator
irb(main):020:0>  ["£60.00"].to_json.encoding
=> #<Encoding:US-ASCII>
irb(main):021:0> "£60.00".encoding
=> #<Encoding:UTF-8>

Environment variables for A:

$ env| grep LC_*
LC_PAPER=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_ALL=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_COLLATE=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_NAME=en_US.UTF-8

B

1.9.3-p125-perf :004 > JSON.parse(["£60.00"].to_json)
 => ["\xA8\xE660.00"]
1.9.3-p125-perf :009 > JSON::VERSION
 => "1.6.3"
1.9.3-p125-perf :010 > RUBY_DESCRIPTION
 => "ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin14.3.0]"
 => "1.6.3"
1.9.3-p125-perf :011 > JSON.generator
 => JSON::Ext::Generator
1.9.3-p125-perf :012 > ["£60.00"].to_json.encoding
 => #<Encoding:US-ASCII>
1.9.3-p125-perf :013 > "£60.00".encoding
 => #<Encoding:UTF-8>

Environment variables for B:

$ env | grep LC
LC_CTYPE=en_US.UTF-8
LC_ALL=en_US.UTF-8

The weird thing is when I do this in B I'm able to get the right value back:

1.9.3-p125-perf :007 > JSON.parse JSON.generate ["£60.00"]
 => ["£60.00"]

It seems that for some reason to_json is doing something weird with the object. I'm running Rails 3.1.11 in both boxes.

Any help would be welcome.

minostro avatar May 23 '15 02:05 minostro