RubyでUTF-8変換時にUndefinedConversionが出た件
shift_jisで書かれたCSVをUTF-8に変換して取り込み処理をするところで、Encoding::UndefinedConversionError が吐かれてた。
str.encode('utf-8', 'shift_jis') # => Encoding::UndefinedConversionError: "\x87@" from Shift_JIS to UTF-8
なんでだと思って調べてたところ、shift_jisでは対応していない①とか㈱とかの機種依存文字を変換しようとしていたからエラー出ていたみたい。なのでCP932(Windows-31J)使えば解決。
str.encode('utf-8', 'CP932') # => ①㈱
対応しない文字を強制的に置き換えするときは
str.encode("Shift_JIS", "UTF-8", { :invalid => :replace, :undef => :replace, :replace => "〓"})