ruby 1.9.3 より前は、Ruby の CSV ライブラリを使用して、エンコーディングが正しくない文字を含む行を取り込むことができました。
require 'csv'
CSV.open('file').each |row|
... #deal with wrong encoded characters here
end
Ruby 1.9.3 の CSV は、「不良」行で例外を発生させArgumentError: invalid byte sequence in UTF-8
ます。これは、ブロック内でキャッチする方法がわかりません。2 つの解決策がありますが、どちらも遅いです。
1. ~8 倍遅い:
open('file').each |line| begin CSV.parse(line) rescue ArgumentError line.encode!('UTF-16', 'UTF-8', :invalid => :replace, :replace => '?') line.encode!('UTF-8', 'UTF-16') CSV.parse(line) end end
2. ~2 倍遅い
CSV に送信する前に、ファイルのエンコードを修正してください。
「悪い」文字を含む行をより速く処理する方法は何ですか?