读取 CSV 撇号

read CSV apostrophe

我正在尝试读取 CSV,但 Ruby 在遇到 CSV 中的箭头时停止读取。箭头应该是撇号。我无法在 CSV 中替换它,因为当我复制和粘贴时,我粘贴了一个 space。

我尝试使用CSV.foreach或File.open,然后阅读each_line。这两种方法都有同样的问题。

该字符在文本编辑器中为黑色 SUB。

我该如何解决这个问题?

CSV.foreach(filename) do |row|
 puts row
end

File.open(filename, "r") do |f|
 f.each_line do |row|       
     puts row
 end
end

如果您的文件没有按照 Ruby 默认的方式编码,您需要在调用 foreach 时手动指定编码,如下所示:

CSV.foreach(filename, encoding: Encoding::UTF_8)

如果您不确定文件是如何编码的,您可以使用 String#encode 作为一个非常重的锤子来清理它,尽管在此过程中您会丢失一些字符。

File.read(filename).encode(
  Encoding::UTF_8,
  undef: :replace,
  invalid: :replace,
  replace: '' 
)

这表示如果字符未定义或无效,则替换它,并用空字符串替换它。当然,您可以调整选项以获得您想要的结果。