4

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 に送信する前に、ファイルのエンコードを修正してください。

「悪い」文字を含む行をより速く処理する方法は何ですか?

4

1 に答える 1

3
CSV.open("file", "r:bom|utf-8").each |row|

end
于 2013-08-22T09:00:37.553 に答える