Skip to content

Ruby YAML ライブラリでの UTF-8 な日本語の扱い

Posted on:2009年11月29日 at 07:00

日本発の言語でありながら、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

のような感じ。