在 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
我无法弄清楚如何在块内捕获。我看到两种解决方案,都很慢:
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 之前修复文件中的编码。
处理包含“坏”字符的行的更快方法是什么?