Преобразование ответа YAML с двоичными данными в UTF-8 в Ruby 1.8.7 - PullRequest
3 голосов
/ 11 марта 2011

Я вытягиваю ответ из 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, поэтому я не могу принудительно кодировать. Есть ли способ распаковать () их?

1 Ответ

4 голосов
/ 11 марта 2011

Похоже, что это документ 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"}}}

Чтобы создать YAML с непосредственным встраиванием UTF-8, вместо экранирования в виде двоичных объектов, вы можете использовать ya2yaml , "еще одну реализацию to_yaml", которая может производить выводкодируется как UTF-8.Установите ya2yaml gem , а затем вызовите его как:

> require 'ya2yaml'
> x.ya2yaml(:syck_compatible => true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...