读取 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: ''
)
这表示如果字符未定义或无效,则替换它,并用空字符串替换它。当然,您可以调整选项以获得您想要的结果。
我正在尝试读取 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: ''
)
这表示如果字符未定义或无效,则替换它,并用空字符串替换它。当然,您可以调整选项以获得您想要的结果。