rubyで波ダッシュ・全角チルダ問題(utf-8 → EUC-JP)
UTF-8の文字をEUC-JPに変換する際にエラーが発生。
encode': U+FF5E from UTF-8 to EUC-JP (Encoding::UndefinedConversionError)
何が起こってるか調査
問題は波ダッシュ・全角チルダ問題 (wikipedia)でした。
解決方法の調査
UTF-8からShift_JISに変換する時の注意を参考に対応
def eucjp_safe(str) [ ["301C", "FF5E"], # wave-dash ["2212", "FF0D"], # full-width minus ["00A2", "FFE0"], # cent as currency ["00A3", "FFE1"], # lb(pound) as currency ["00AC", "FFE2"], # not in boolean algebra ["2014", "2015"], # hyphen ["2016", "2225"], # double vertical lines ].inject(str) do |s, (after, before)| s.gsub( before.to_i(16).chr('UTF-8'), after.to_i(16).chr('UTF-8')) end end eucjp_safe("変換に失敗した文字。").encode("eucJP")
以上。