我正在尝试读取CSV并且Ruby遇到CSV中的箭头后停止阅读。箭头应该是撇号。我不能用CSV替换它,因为当我复制和粘贴时,我会粘贴一个空格。
我尝试使用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
答案 0 :(得分:2)
如果您的文件没有按照Ruby默认的方式进行编码,则需要在调用foreach
时手动指定编码,如下所示:
CSV.foreach(filename, encoding: Encoding::UTF_8)
如果你不确定文件是如何编码的,你可以使用String#encode
作为一个非常重的锤子来清除它,尽管你在此过程中会丢失一些字符。
File.read(filename).encode(
Encoding::UTF_8,
undef: :replace,
invalid: :replace,
replace: ''
)
这表示如果字符未定义或无效,请将其替换,并将其替换为空字符串。当然,您可以调整选项以获得您想要的结果。