技術評論社のYAML解説ページには、Rubyのソースにパッチを当てビルドする方法や、ya2yamlを使用する方法が書いてあった。しかし、パッチを当てた環境をすべてに適用するのは非常に面倒であり、ya2yamlについては標準ライブラリではない上に、少々遅いという問題がある。
そこで、どうにかする方法はないものかとYAMLのソースを眺めていたところ、以下の方法であっさり解決してしまった。
#!/usr/bin/env ruby
# -*- encoding: utf-8 -*-
require "yaml"
require "yaml/encoding"
# String.is_binary_data?で必ずfalseを返すように書き換える
class String
def is_binary_data?
return false
end
end
data = {"はつね"=>"みく", "はちゅね"=>"みく", "かがみね"=>"りん・れん", "めぐりね"=>"るか"}
# 通常どおり表示
puts "Escape:"
puts yaml = YAML.dump(data)
# アンエスケープして表示
puts "Unescape:"
puts yaml = YAML.unescape(yaml)
一度エスケープされたものをまた戻すという、面倒なことになっているが、ソース修正するよりマシかな…と。
これで、YAMLで書き出して手動で編集…なんてことがやりやすくなるかもしれない。
1 件のコメント:
前から悩んでたんで割りと本気で助かりました。
情報ありがとうございます。
コメントを投稿