YAML.dumpの全角文字バイナリ文字列化ちょい対策



YAMLのエンジンにPsychを利用するという本来の対策ができなかった(libyamlの入れ方がわからない)
Windowsでのlibyaml入れ方教えてー!エライ人!!


と困ったままというわけにはいかないので取りあえずeval使って全角文字に戻した

YOML
# coding: CP932
require "yaml"

module YOML
  class << self
    def dump( obj, io=nil )
      sio = StringIO.new
      ( io || sio ) << YAML.dump_stream(obj).gsub(/":?.+"/) { |s| eval(s) }
      io ? io.close : sio.rewind && sio.read
    end
  end
end


if __FILE__ == $0

months  = {

  OLD:  {

    睦月:         1,
    如月:         2,
    弥生:         3,
    卯月:         4,
    皐月:         5,
    水無月:       6,
    文月:         7,
    葉月:         8,
    長月:         9,
    神無月:       10,
    霜月:         11,
    師走:         12,

  },

  :KANJI  =>  {

    "一月"    =>  1,
    "二月"    =>  2,
    "三月"    =>  3,
    "四月"    =>  4,
    "五月"    =>  5,
    "六月"    =>  6,
    "七月"    =>  7,
    "八月"    =>  8,
    "九月"    =>  9,
    "十月"    =>  10,
    "十一月"  =>  11,
    "十二月"  =>  12,

  },

}

puts YAML.dump( months )
puts YOML.dump( months )
YAML.dump( months, File.open( "months.yaml", "w" ) )
YOML.dump( months, File.open( "months.yoml", "w" ) )

end

evalを使わなくて良い方法も教えてー!エライ人!!

YAML.dump出力
--- 
:OLD: 
  ":\x96r\x8C\x8E": 1
  ":\x94@\x8C\x8E": 2
  ":\x96\xED\x90\xB6": 3
  ":\x89K\x8C\x8E": 4
  ":\x8EH\x8C\x8E": 5
  ":\x90\x85\x96\xB3\x8C\x8E": 6
  ":\x95\xB6\x8C\x8E": 7
  ":\x97t\x8C\x8E": 8
  ":\x92\xB7\x8C\x8E": 9
  ":\x90_\x96\xB3\x8C\x8E": 10
  ":\x91\x9A\x8C\x8E": 11
  ":\x8Et\x91\x96": 12
:KANJI: 
  "\x88\xEA\x8C\x8E": 1
  "\x93\xF1\x8C\x8E": 2
  "\x8EO\x8C\x8E": 3
  "\x8El\x8C\x8E": 4
  "\x8C\xDC\x8C\x8E": 5
  "\x98Z\x8C\x8E": 6
  "\x8E\xB5\x8C\x8E": 7
  "\x94\xAA\x8C\x8E": 8
  "\x8B\xE3\x8C\x8E": 9
  "\x8F\\\x8C\x8E": 10
  "\x8F\\\x88\xEA\x8C\x8E": 11
  "\x8F\\\x93\xF1\x8C\x8E": 12
YOML.dump出力
--- 
:OLD: 
  :睦月: 1
  :如月: 2
  :弥生: 3
  :卯月: 4
  :皐月: 5
  :水無月: 6
  :文月: 7
  :葉月: 8
  :長月: 9
  :神無月: 10
  :霜月: 11
  :師走: 12
:KANJI: 
  一月: 1
  二月: 2
  三月: 3
  四月: 4
  五月: 5
  六月: 6
  七月: 7
  八月: 8
  九月: 9
  十月: 10
  十一月: 11
  十二月: 12