【问题标题】:ActiveStorage CSV file force encoding?ActiveStorage CSV 文件强制编码?
【发布时间】:2018-12-03 01:14:41
【问题描述】:

我正在上传一个 CSV 文件,在将行导入数据库时​​遇到问题:

Encoding::UndefinedConversionError ("\xCC" from ASCII-8BIT to UTF-8)

确保每一列都被正确编码以放入数据库被忽略的最有效方法是什么?

最基本的方法是遍历每一行和每个字段并强制对字符串进行编码,但这似乎非常低效。有什么更好的方法来处理这个问题?

目前它只是作为参数上传(:csv_file)。然后我按如下方式访问它:

CSV.parse(csv_file.download) 在模型中。

我假设有一种方法可以在对 activestorage 文件调用 CSV.parse 时强制编码,但不确定如何。有任何想法吗?

谢谢!

【问题讨论】:

  • 是保存 CSV 文件还是仅使用 CSV 进行数据导入然后丢弃它?因为如果是后者你不需要使用activestorage,只需要简单的文件上传就可以了。
  • @SimonBrazell 它正在被持久化

标签: ruby-on-rails ruby ruby-on-rails-5 rails-activestorage


【解决方案1】:

最新版本的 ActiveStorage (6.0.0.rc1) 添加了一个 API,以便能够将文件下载到临时文件,然后您可以从中读取。我假设 Ruby 将使用正确的编码从文件中读取。

https://edgeguides.rubyonrails.org/active_storage_overview.html#downloading-files

如果您不想升级到 Rails 6 的 RC(就像我不想),您可以使用此方法将字符串转换为 UTF-8,同时摆脱可能存在的字节顺序标记你的文件:

wrongly_encoded_string = active_record_model.attachment.download
correctly_encoded_string = wrongly_encoded_string.bytes.pack("c*").force_encoding("UTF-8")

【讨论】:

  • 非常感谢您的回答。像魅力一样工作
猜你喜欢
  • 2013-06-20
  • 2023-03-24
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 2011-08-28
相关资源
最近更新 更多