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 さんありがとうございました。