gpt4 book ai didi

Ruby JSON.parse 为 unicode 返回不正确的数据

转载 作者:数据小太阳 更新时间:2023-10-29 07:15:26 24 4
gpt4 key购买 nike

我正在尝试使用 JSON.parse 解析一些包含转义 unicode 字符的 JSON。但是在一台机器上,使用 json/ext,它会返回不正确的值。例如,\u2030 应该以 UTF-8 返回 E2 80 B0,但我得到的是 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]

那么我的环境或设置中是否还有其他因素可能导致它解析不正确?

最佳答案

最近遇到了同样的问题,我追踪到 this Ruby bugthis buffer 的声明引起在 Ruby 1.9.2 中以及它如何获得 optimized by GCC .它固定在 this commit 中.

您可以使用 -O0 重新编译 Ruby 或使用更新版本的 Ruby(1.9.3 或更高版本)来修复它。

关于Ruby JSON.parse 为 unicode 返回不正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10234924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com