ruby-on-rails - 如何克服 Excel CSV 编码的噩梦:使用 Ruby on Rails 从 ASCII-8BIT 到 UTF-8 的“\xEF”
问题描述
我正在尝试在 Rails 中解析 CSV 文件,除了保存在 Excel 中的任何内容(使用版本 16.26 进行测试)之外,对于 Windows 和 Mac(保存在 Numbers 和 Google 工作表中的 CSV 可以正常工作)。任何带重音的字符都会产生"Encoding::UndefinedConversionError: "\xEF" from ASCII-8BIT to UTF-8".
Excel 声称它以 UTF-8 格式保存。
当我上传保存在 Excel 中的 CSV 时,我希望重音字符不会引发错误。
我尝试过的事情:
将读取编码设置为 bom|utf-8(根据BOM 链接)、utf-8、iso-8859-1、utf-16、windows-1252、ascii-8bit (并在数组中循环遍历其中的每一个一个失败然后将其从阵列中删除)
当前代码使用 ISO8859-1:UTF-8 应该以 ISO8859-1 读取,然后以 UTF-8 编码
创建一个临时文件,将其转换为 binmode,CSV.parse(temp.path, encoding: "bom|utf-8") 根据此线程中的第一个答案。
data = CSV.parse(csv, headers: true, header_converters: :symbol, skip_blanks: true, encoding: 'ISO8859-1:UTF-8')
如果我将 csv 保存在 Excel 中,然后将其保存在 google sheet 或 Numbers 中,然后上传它,它也可以工作。不幸的是,Excel 是我们用户上传的最常见的 CSV。
解决方案
通过使用csvreader gem解决。内置的 CSV 解析器吸收了 rails。
推荐阅读
- react-native - React Native 设置动画值
- hadoop - 如何移动hdfs中的最后n个文件
- php - 子域上的 Laravel 存储链接
- css - 我怎样才能使这个文本居中并删除它的默认高度
- javascript - 在 Angular 电子应用程序中读取大型 zip 文件
- azure-ad-b2c - 是否可以在 IdentityModel.OidcClient 中获取 code_verifier?
- reactjs - React 和 SAPUI5 的具体配置:如何解决 CopyPlugin 的验证错误?
- java - 在 Spring Boot 中使用安全的 Soap Web 服务
- javascript - antd中如何获取Input.Password项的值
- kubernetes - GCP-LB 不均匀地将流量分配到 HAProxy Ingress Controller Pod