ruby - 带有 JRuby 的 JSON - 不以 UTF-8 解析结果

标签 ruby json jruby

我正在使用 JSON implementation for Ruby在我的rails项目中解析ajax发送的json字符串,但是发现json字符串虽然是UTF-8,但是出来的结果默认是ASCII-8BIT,见下图

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>

我不希望它被转义,我想要一个 UTF-8 结果。有没有办法设置它?我检查了 JSON 项目的文档,发现方法 JSON.parse 没有编码选项。也许我错过了什么,我该怎么做?

更新: 正如@fl00r 所通知的那样,此示例在 MRI 中运行良好,但在 JRUBY 中运行不正常

最佳答案

这看起来像是一个错误,因为这在使用纯版本时确实有效:

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 >

编辑:刚刚看到您打开了一个ticket为此……

编辑 2: 这实际上似乎已经被 commit 修复了.从 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

关于ruby - 带有 JRuby 的 JSON - 不以 UTF-8 解析结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9803687/

相关文章:

ruby - 使用多个参数插入会给出 SQLite3::RangeException

android - 巨大的 HttpPost 响应 : JSON

java - 如何批量删除hbase中的多行?

java - 从 jruby 和 warbled jar 运行之间有什么区别 "under the hood"?

ruby-on-rails - 与 has_many 达到二级关联

linux - Ruby 脚本在使用 crontab 执行时提取错误值

ruby - 这种内部 DSL 语法在 Ruby 中是否可行?

c# - 根据 JSON Schema C# 验证 JSON

javascript - 我如何检查已经请求的ajax数据?

ruby-on-rails - 仅在创建时验证方法调用,而不是在更新时调用