ruby 中的 csv 文件编码问题

csv file encoding issue in ruby

我使用 ruby 解析 csv 文件并收到错误

invalid byte sequence in utf-8 csv

我尝试使用编码选项

    CSV.foreach(path, {headers: true, encoding: 'windows-1251:utf-8'}) do |row|
        new_row = {}
        headers = []
        row.each do |k,v|
            headers << k
            v = v.force_encoding('UTF-8') || ''
            v.gsub! "\xE2\x80\x96", "-"
            v.gsub! "\xE2\x80\x93", "-"
            v.gsub! "\xE2\x80\x94", "-"
            v.gsub! "\xE2\x80\x95", "-"
            v.gsub! "\xE2\x80\x98", "'"
            v.gsub! "\xE2\x80\x99", "'"
            v.gsub! "\xE2\x80\x9C", "\""
            v.gsub! "\xE2\x80\x9D", "\""
            v.gsub! "\xE2\x80\xA6", "..."
            v.gsub! "\x0D\x0A", "\n"
            v.gsub! "\xC2\xA0", " "
            v.gsub! "\xC2\xB0", " "

            new_row[k] = v
        end

        output_csv.puts headers if output_csv.header_row?
        output_csv.puts new_row
    end

现在我得到了

incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)

CSV 文件中引发此问题的字符串是 "G�ran"

下面是示例输入行

David Evans & Assocs    www.deainc.com  13858534    jpv@deainc.com  G�ran   Volk    5034990383

任何人都可以建议我如何解决这个问题。

这个问题很可能是由于保存 文件编码错误引起的。比如说,你的文件中有 unicode 符号“★”。将其保存为 ASCIILatin1 或其他每个符号 1 个字节的编码,您 会丢失一些数据

符号“�”被称为replacement character。它用于表示“这里是在编码转换过程中显然丢失的 unicode。”