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