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我无法弄清楚如何在块内捕获。我看到两种解决方案,都很慢:

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 回答