如何从两种可能编码的 CSV 文件中读取数据?

How to read data from a CSV file of two possible encodings?

我想从具有两种可能编码(UTF-8 和 ISO-8859-15)的 csv 文件中读取数据。我的意思是具有不同编码的不同文件。具有两种编码的文件不同。 现在我只能从一个utf-8编码的文件中正确读取数据。我可以通过添加一个额外的选项来实现吗?例如 。 encoding: 'ISO-8859-15'

我有:

def csv
   file = File.open(file.tempfile)
   CSV.open(file, csv_options)
end

private

def csv_options
{
   col_sep: ";",
   headers: true,
   return_headers: false,
   skip_blanks: true 
}
end

一旦知道文件的编码方式,就可以在 CSV 选项中传递,即

external_encoding: Encoding::ISO_8859_15, 
internal_encoding: Encoding::UTF_8 

(这将确定文件是 ISO-8859-15,但您希望内部字符串为 UTF-8)。

所以策略是你先决定(在打开文件之前)你想要什么编码,然后使用合适的选项哈希。