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

我正在从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,而不是作为二进制对象进行转义,您可以使用ya2yaml ,“又一个to_yaml”实现,它可以生成编码为UTF-8的输出。 安装ya2yaml gem ,然后将其调用为:

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