【问题标题】:Why do I get ArgumentError - invalid byte sequence in UTF-8?为什么我会收到 ArgumentError - UTF-8 中的无效字节序列?
【发布时间】:2013-08-22 16:42:50
【问题描述】:

尝试从 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: '') 的情况下跳过无效字符?

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

【问题讨论】:

  • 我们需要更多的上下文;向我们展示您用于读取 CSV 文件的代码。很有可能您没有正确打开文件。
  • 刚刚添加了我正在使用的 CSV.foreach 行。

标签: ruby encoding utf-8


【解决方案1】:

这是来自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 或变体。

【讨论】:

    猜你喜欢
    • 2015-07-04
    • 2016-07-05
    • 2013-08-20
    • 1970-01-01
    • 2012-06-19
    • 2017-03-31
    • 1970-01-01
    • 2012-12-11
    • 2023-04-03
    相关资源
    最近更新 更多