ruby-on-rails - 不同环境读取同一个文件时Ruby字符编码困惑

标签 ruby-on-rails ruby character-encoding

我有一个接受 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

最佳答案

一些想法:

  1. 您是否已确认正在上传的文件的编码?
  2. 您是否按照 Frederick Cheung 的建议在 Mac 上使用 1.9.2-p180 进行了测试?
  3. 您是否尝试过在每个平台上输出 CharDet.detect 的结果,以查看接收到的文件(相对于上传的文件)的编码是什么?我想知道 Linux 上的 Apache 和您的 Mac 上的 WEBrick 是否有某些配置不同?
  4. 您是否在两个平台上使用相同版本的 CharDet?它使用哪些库(例如 iconv),它们在两个平台上的版本是否相同?

我不知道 1.9.2 和 1.9.3 在编码方面有什么不同,但我也没有专门研究过。这也可能是 MRI 构建配置的差异。

关于ruby-on-rails - 不同环境读取同一个文件时Ruby字符编码困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11219749/

相关文章:

ruby-on-rails - rake 中止!未定义的方法 `each' 为零 :NilClass

android - 发现依赖于默认编码 : new java. io.FileWriter(File, boolean)

尽管出现 UnicodeDecodeError,Python 3 itertools.islice 仍继续

javascript - 当通过元素的 id 与元素一起使用时,jQuery .load() 是否会加载整个页面?

ruby-on-rails - 首次登录时显示不同的 Devise Flash 消息

ruby - Xpath:所有节点直到一个节点(Wikiquote.org)

ruby - 如何使用 Selenium Ruby Webdriver 双击表格中的单元格

google-app-engine - App Engine 中的 Python unicode 字符串操作失败

ruby-on-rails - 从外键获取 Rails 关联?

javascript - JS 加载的 Twitter 分享按钮无法正确呈现