如何克服Excel CSV编码的噩梦:"\xEF"从ASCII-8BIT到UTF-8使用Ruby



我正在尝试解析Rails中的CSV文件,除了Windows和Mac的Excel中保存的任何内容(使用版本16.26进行测试(之外,效果很好(保存在Numbers和Google表格中的CSV工作正常(。任何带有重音符的字符都会产生"Encoding::UndefinedConversionError: "xEF" from ASCII-8BIT to UTF-8".

Excel声称它以UTF-8保存。

我希望重音字符在上传保存在 Excel 中的 CSV 时不会引发错误。

我尝试过的事情:

  1. 将读取编码设置为 BOM|UTF-8(根据 BOM 链接(、UTF-8、ISO-8859-1、UTF-16、Windows-1252、ASCII-8 位(并在数组中循环遍历其中的每一个,以防万一其中一个失败,然后将其从数组中删除(

  2. 当前代码使用 ISO8859-1:UTF-8,它应该以 ISO8859-1 读取,然后以 UTF-8 编码

  3. 创建一个临时文件,根据此线程中的第一个答案将其转换为binmode,CSV.parse(temp.path,编码:"bom|utf-8"(。

data = CSV.parse(csv, headers: true, header_converters: :symbol, skip_blanks: true, encoding: 'ISO8859-1:UTF-8')

如果我将保存在 Excel 中的 csv,然后将其保存在谷歌表格或数字中,然后上传,它也有效。不幸的是,Excel是我们用户上传的最常见的CSV。

使用 csvreader gem 解决。内置的CSV解析器吸进了轨道。

最新更新