我有一个接受 CSV 文件上传的 Rails 应用程序。在我的 Mac 上本地开发该功能时,我在尝试解析上传的文件(使用 Ruby 的标准库 CSV)时收到“UTF-8 中的无效字节序列”错误。
因此,在对 StackOverflow 上的类似问题进行了一些研究并阅读了一些答案之后,我尝试使用 gem 来嗅出字符编码(即 CharDet),然后在通过 CSV 库打开文件时,我会指定编码。这解决了我所有的问题,生活很美好。
content = File.read(fullpath)
self.file_encoding = CharDet.detect(content)['encoding']
CSV.table(fullpath, :encoding => file_encoding, :header_converters => :downcase).headers
但后来我将此代码部署到生产 Linux 环境,并再次出现“UTF-8 中的无效字节序列”错误。多么神秘(无论如何对我来说)!在尝试解决错误一段时间后,我尝试在打开文件时删除指定编码的代码。并且奇迹般地解决了生产问题,但现在本地 Mac 开发被打破了。
请记住,在这两种情况下,我都使用相同的浏览器上传相同的文件。有人对这里发生的事情有任何见解吗?
顺便说一句,ruby 的版本很接近,但不一样。Mac 是ruby 1.9.3-p0,Linux 服务器是1.9.2-p180。该应用程序是 Rails 3.2.6。