コピペコードで快適生活

明日使えるソースを自分のために

RubyでUTF-8変換時にUndefinedConversionが出た件

shift_jisで書かれたCSVUTF-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 => ""})