我有一个Rails应用程序,可以接受CSV文件的文件上传。在我的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 。
答案 0 :(得分:1)
一些想法:
我不知道1.9.2和1.9.3之间在编码方面的行为有任何差异,但我也没有专门研究它。它也可能是MRI构建配置的差异。