为什么我会收到ArgumentError - UTF-8中的字节序列无效?

时间:2013-08-22 16:42:50

标签: ruby encoding utf-8

尝试从CSV文件中打印Duplicaci¾n时,出现以下错误:

ArgumentError - invalid byte sequence in UTF-8

我正在使用Ruby 1.9.3-p362并使用以下命令打开文件:

CSV.foreach(fpath, headers: true) do |row|

如何在不使用iconv或str.encode(undef: :replace, invalid: :replace, replace: '')

的情况下跳过无效字符

我尝试了以下问题的答案,但没有任何效果:

1 个答案:

答案 0 :(得分:0)

这来自CSV.open documentation

  

除非您的数据位于Encoding :: default_external()中,否则您必须提供具有嵌入式编码指示符的模式。 CSV将检查底层IO对象的编码(由您传递的模式设置)以确定如何解析数据。您可以提供第二个编码,以便在读取数据时对其进行转码,就像正常调用IO :: open()一样。例如,“rb:UTF-32BE:UTF-8”将从文件读取UTF-32BE数据,但在CSV解析之前将其转码为UTF-8。

这适用于CSV中打开文件的任何方法。

同时开始阅读以下开头的文档:

  

CSV和字符编码(M17n或多语言化)

Ruby期待UTF-8,但看到的字符不合适。我怀疑WIN-1252或ISO-8859-1或变种。