json
json copied to clipboard
parse a to_json result return a different value
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.