2

我在解析此处发布的 CSV 文件时遇到了问题:Ruby 无法解析 CSV 文件:CSV::MalformedCSVError (Illegal quoting in line 1.)

问题已通过@Anand 收到的指导得到解决。在此处发布答案以供参考,以防对其他人有所帮助。

我在上面提到的帖子中显示的示例代码中使用的文件(/tmp/my_data.csv)实际上在文件开头包含名为 BOM(字节顺序标记)的 Unicode 字符。我从客户端收到文件所以不知道他们是怎么进去的。

使用@Anand 的使用以下代码的建议:

如果是字符串

sub!(/^\xEF\xBB\xBF/, '') 

或者在以 BOM 字符开头的文件的情况下

CSV.foreach("test.csv", encoding: "bom|utf-8")

工作。

然而,这引发了另一个问题,即有没有一种方法可以检测 CSV 文件中的问题,例如包含不同于标准 Unicode 的特定编码字符?换句话说,我的文件包含 BOM unicode 字符。在我开始阅读文件之前是否可以更早地检测并修复这些字符?有出路吗?我的意思是上面显示的解决方案需要源文件所在的编码和目标编码。所以应该有一种方法来确定源编码或要读取的源文件中存在的此类字符。如果有人对此有任何想法请提供您的意见。

谢谢,吉涅什

4

1 回答 1

2

使用'bom|utf-8'BOM 将被删除。文件是否实际具有 BOM 并不重要,因此您可以放心使用此选项。从Ruby 文档

如果 ext_enc 以 开头'BOM|',请检查输入是否有 BOM。如果有 BOM,将其剥离并按照 BOM 的说明设置外部编码。

于 2013-05-27T17:54:37.763 回答