Ruby で文字コード変換

nuna さんに教えてもらいました。1.8.2 以降では NKF#nkf を使うと良いそうです。リモートの RSS を取得して、そのタイトルを EUC-JP で出力してみます。

#!/usr/local/bin/ruby

require 'open-uri'
require 'rss/1.0'
require 'nkf'

content = Kernel.open('http://d.hatena.ne.jp/rubyo/rss')
rss = RSS::Parser::parse(content.read)

rss.items.each do |item|
  puts NKF.nkf('-m0 -e', item.title)
end

NKF.nkf('-m0 -e', item.title) のところで UTF-8 から EUC-JP に変換しています。第一引数が謎のオプションです。おそらく nkf コマンドと同一なのでしょう。こんなプログラマブルでないインタフェースでいいのでしょうか...ほかにちゃんとしたインタフェースがあるのかもしれません。

実行すると、

$ ruby euc2utf8.rb
 Ruby リファレンスマニュアル
 initialize に渡ってきたパラメタをインスタンス変数に丸投げする
 RSS を YAML に変換する#2
 Template Method パターン
 initialize に渡された値を自動的にインスタンス変数にする
 Adapter パターン
 Enumerable で拡張してみます
 Iterator パターン
 RSS を YAML に変換する
 RSS フィードを処理する
 HTTP でコンテンツを取得する
 irb で文法確認
 Ruby で YAML
 Ruby で grep
 るびおです。

と、確かに EUC-JP な端末に文字化けせずに出力させることができました。nuna さんありがとうございました。