Ruby YAML ライブラリでの UTF-8 な日本語の扱い
日本発の言語でありながら、Ruby の YAML 標準ライブラリには弱点がある。。
Ruby の YAML ライブラリは、日本語を正しく扱ってくれない。
具体的には、Object#to_yaml を使用した際に、UTF-8 な日本語が binary 扱いになってしまう。
1 2 3 4 5 6 7 8 9 |
$ irb --prompt simple >> $KCODE => "NONE" >> $KCODE = 'u' => "u" >> str_ja = '日本語' => "日本語" >> str_ja.to_yaml => "--- !binary |\n5pel5pys6Kqe\n\n" |
この問題を回避するためのライブラリが幾つかある。
ここでは、yaml_waml を使ってみる。
yaml_waml を使う準備
gem で提供されているので、インストールしていない場合はインストールしておく。
なお、gemcutter に移行されているので、gemcutter をまだ使っていない場合は、先に準備しておく。
1 2 3 4 5 6 7 8 |
$ gem install gemcutter $ gem tumble $ gem sources *** CURRENT SOURCES *** http://gemcutter.org http://gems.rubyforge.org/ http://gems.github.com |
yaml_waml のインストール。
1 2 3 4 5 |
$ gem install yaml_waml Successfully installed yaml_waml-0.3.0 1 gem installed Installing ri documentation for yaml_waml-0.3.0... Installing RDoc documentation for yaml_waml-0.3.0... |
yaml_waml を使ってみる
先程の irb のプロンプトに引き続き実験。
1 2 3 4 |
>> require 'yaml_waml' => true >> str_ja.to_yaml => "--- "日本語"\n" |
OK だ。
Rails で使用する
Rails で対応する場合には、config/environment.rb で gem の指定しておく。
1 2 3 4 5 |
Radiant::Initializer.run do |config| ... config.gem 'yaml_waml', :version => '~> 0.3', :source => 'http://gemcutter.org' ... end |
のような感じ。
0 comments