(続き)

if文の条件が大変なことになっているのは
if /(\W+)/ =~ line
としてしまうと最初の"○ ×"のみ抽出して終わってしまうためです。
プログラムとして力技で美しくないのは分かっています。
また、日本語が文字化けしてしまっています・・・文字コードの問題だろうとソース先頭に#!ruby -Ksを足してみましたが、
空白類の扱いが変わった?のと記号以外の文字類が表示されなくなりました。

抽出部分を綺麗にするにはイテレータで回せば良いかなと思っています。
→一文字ずつチェックしようと思いましたが、String#each_byteが全半角を問題なく捌けるのか問題が・・・

問題をまとめると
1:文字列の中から上記抽出対象のみ抽出したいが、力技で汎用性がないので改善したい
2:文字化けしてしまうが原因、対策が分からない
となります。

OSはWindows XP SP3でRubyのバージョンは1.8.6です。

長文乱文で分かりにくい質問となってしまい申し訳ありませんが、よろしくお願いします。