From: Hiroyuki Iwatsuki Date: 2006-05-07T00:02:59+09:00 Subject: [ruby-list:42204] Re: YAML でEUC は使えないのでしょうか。 岩月と申します。 Ruby 1.8.4現在、YAMLライブラリは入力データの文字コードに ついては一切考慮していないため、EUC-JPな文字列をそのまま YAMLファイルに書けば、YAML.loadによって読み出される 文字列の文字コードはYAMLのままです。 例えば次のようにEUC-JPの文字列を含むYAMLファイルを 用意して、YAML.loadで読み込んでも文字コードに変化は ありません。 % cat euc-jp.yaml --- あいうえお % ruby -v -Ke -ryaml -e "p YAML.load(File.read('euc-jp.yaml'))" ruby 1.8.4 (2005-12-24) [i386-freebsd6] "あいうえお" 逆にYAML記法による出力データにおいて、日本語をそのまま 出力することが Ruby 1.8.4 現在困難になっています。 もし野村さんが Ruby 1.8.3 以降をお使いでしたら、 それはYAMLライブラリの仕様だと思われます。 私の記憶が確かなら Ruby 1.8.2 の頃は日本語の文字列をそのままの形で 出力していたため、結果的にそのまま日本語で読めていました。 Ruby 1.8.3 あたりから日本語をバイナリデータとして扱われるようになり、 出力結果が日本語として読めなくなりました。 % ruby -v -Ke -ryaml -e "p YAML.load(File.read('euc-jp.yaml')).to_yaml" ruby 1.8.4 (2005-12-24) [i386-freebsd6] "--- !binary |\npKKkpKSmpKikqg==\n\n" まとめますと、Ruby 1.8.4 現在、YAMLライブラリへの入力しては 文字コードは何を使ってもかまいません。逆にYAMLライブラリによる 出力では日本語を日本語として出力できません。 これが仕様か不具合かどうかはYAMLライブラリのメンテナに尋ねるしか ないのではないかなあ、と思います。 -- IWATSUKI Hiroyuki