str.encode(Encoding::SJIS, :invalid => :replace, :undef => :replace) と、やれば Encoding::UndefinedConversionError エラーは出ないのだけど、ハイフン等の情報が失われて"?"になる。 特定の文字を文字コード変換前に変換しておけばOK。 http://esoz.blog.fc2.com/blog-entry-59.html を参考に、Stringを汚さないように書き直しました。 def sjis_safe(str) [ ["301C", "FF5E"], # wave-dash ["2212", "FF0D"], # full-width minus ["00A2", "FFE0"], # cent as currency ["00A3", "FFE1"], # lb(pound) as c