在Ruby 1.8.7中将带有二进制数据的YAML响应转换为UTF-8

在Ruby 1.8.7中将带有二进制数据的YAML响应转换为UTF-8,ruby,utf-8,yaml,Ruby,Utf 8,Yaml,我正在从API获取响应并收到: response: job: unit_count: "1" slug: Answers lc_tgt: ja body_tgt: !binary | 5Zue562U lc_src: en body_src: Answers job_id: "1948888"

我正在从API获取响应并收到:

      response: 
        job: 
          unit_count: "1"
          slug: Answers
          lc_tgt: ja
          body_tgt: !binary |
            5Zue562U

          lc_src: en
          body_src: Answers
          job_id: "1948888"
      opstat: ok

body_tgt值应该是几个日文字符(回答), 但是为了安全运输,它们正在被转换。我使用的是1.8.7,所以我不能强制编码。有没有办法解压缩它们?

这似乎是一个YAML文档,而不是JSON,使用的是YAML的二进制数据语言(反过来使用base64编码)

Ruby内置的YAML解析库应该能够为您解析数据:

> x = YAML.load('      response: 
        job: 
          unit_count: "1"
          slug: Answers
          lc_tgt: ja
          body_tgt: !binary |
            5Zue562U

          lc_src: en
          body_src: Answers
          job_id: "1948888"
      opstat: ok')
 => {"opstat"=>"ok", "response"=>{"job"=>{"slug"=>"Answers", 
"unit_count"=>"1", "lc_tgt"=>"ja", "lc_src"=>"en", "body_tgt"=>"回答",
"job_id"=>"1948888", "body_src"=>"Answers"}}}
为了生成直接嵌入UTF-8的YAML,而不是作为二进制对象转义,您可以使用“另一个to_YAML”实现,该实现可以生成编码为UTF-8的输出。安装,然后作为调用:

> require 'ya2yaml'
> x.ya2yaml(:syck_compatible => true)

我可以在ruby 1.9.2上确认同样的事情。将问题从json更改为yaml以符合实际情况。:)你是对的。结果将调用。如果我去掉这个,日语字符是正确的。所以看起来真正的问题是to_yml正在转换我的UTF-8字符串,我不知道如何防止。