我正在尝试使用JSON.parse
. 但是在一台机器上,使用json/ext
,它会返回不正确的值。例如,\u2030
应该E2 80 B0
以 UTF-8 返回,但我得到的是01 00 00
. "\\u2030"
它会因转义或未转义而失败"\u2030"
。
1.9.2p180 :001 > require 'json/ext'
=> true
1.9.2p180 :002 > s = JSON.parse '{"f":"\\u2030"}'
=> {"f"=>"\u0001\u0000\u0000"}
1.9.2p180 :003 > s["f"].encoding
=> #<Encoding:UTF-8>
1.9.2p180 :004 > s["f"].valid_encoding?
=> true
1.9.2p180 :005 > s["f"].bytes.map do |x| x; end
=> [1, 0, 0]
它可以在我的另一台机器上使用相同版本的 ruby 和类似的环境变量。两台机器上的 Gemfile.lock 是相同的,包括json (= 1.6.3)
. 它确实适用json/pure
于两台机器。
1.9.2p180 :001 > require 'json/pure'
=> true
1.9.2p180 :002 > s = JSON.parse '{"f":"\\u2030"}'
=> {"f"=>"‰"}
1.9.2p180 :003 > s["f"].encoding
=> #<Encoding:UTF-8>
1.9.2p180 :004 > s["f"].valid_encoding?
=> true
1.9.2p180 :005 > s["f"].bytes.map do |x| x; end
=> [226, 128, 176]
那么我的环境或设置中是否还有其他可能导致它解析不正确的东西?