为什么我得到ArgumentError-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: '')的情况下跳过无效字符?

我尝试了以下问题的答案,但没有成功:

  • ruby 1.9:UTF-8中的无效字节序列
  • UTF-8中的Ruby无效字节序列
  • ruby 1.9:UTF-8中的无效字节序列

这来自CSV.open文档:

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

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

同时开始阅读以开头的部分的文档

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

Ruby期望使用UTF-8,但却看到不合适的字符。我会怀疑WIN-1252或ISO-8859-1或一种变体。

最新更新