日本発の言語でありながら、Ruby の YAML 標準ライブラリには弱点がある。。
Ruby の YAML ライブラリは、日本語を正しく扱ってくれない。
具体的には、Object#to_yaml
を使用した際に、UTF-8 な日本語が binary 扱いになってしまう。
$ 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 をまだ使っていない場合は、先に準備しておく。
$ gem install gemcutter
$ gem tumble
$ gem sources
*** CURRENT SOURCES ***
http://gemcutter.org
http://gems.rubyforge.org/
http://gems.github.com
yaml_waml
のインストール。
$ 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 のプロンプトに引き続き実験。
>> require 'yaml_waml'
=> true
>> str_ja.to_yaml
=> "--- "日本語"\n"
OK だ。
Rails で使用する
Rails で対応する場合には、config/environment.rb
で gem の指定しておく。
Radiant::Initializer.run do |config|
...
config.gem 'yaml_waml', :version => '~> 0.3', :source => 'http://gemcutter.org'
...
end
のような感じ。