【问题标题】:firefox makes paperclip store special characters as questionmarksFirefox 使回形针将特殊字符存储为问号
【发布时间】:2012-10-19 12:25:29
【问题描述】:

当我使用 Firefox 上传名为“åäöÅÄÖ.jpg”的文件时,它会将其存储为“a?a?o?A?A?O?.jpg”

使用 Google Chrome、Safari 和 Internet Explorer 可以正常工作。

当我查看 Rails 控制台时,插入文件名的查询看起来没问题:

BlogHeader Update (0.4ms)   UPDATE 'blog_headers' 
  SET 'large_file_name' = 'åäöÅÄÖ.jpg', 
  'updated_at' = '2012-10-19 14:13:36' WHERE 'id' = 14`

显然是一个编码问题,但我似乎无法追踪它在哪里中断。有任何想法吗?使用 Rails 2.3.11 和 Paperclip 2.8.0。

编辑: 解决此问题的另一种方法是在文件上传后重命名文件名(例如,使用正则表达式删除所有非 a-z 字符)。我一直在研究 Paperclip 中的插值,但由于这适用于已上传的文件,它也会破坏它们。

【问题讨论】:

  • 您提交上传文件的表单标签是否包含:

标签: mysql ruby-on-rails paperclip


【解决方案1】:

这明显是编码问题,好像firefox没有强制你使用utf8,你可以试试把这个放到view里:

# encoding utf-8

if defined? Encoding 
  Encoding.default_internal = 'UTF-8'
  Encoding.default_external = Encoding::UTF_8
end

在你的environment.rb

这也可能是您的 mysql 编码的问题,可能是 mysql 连接器未正确设置编码。试试上面的。

【讨论】:

  • 我添加了后半部分,对 environment.rb 没有任何更改。你到底是什么意思我应该在视图中设置编码变量?
  • 在视图中,字面上将# encoding utf-8作为第一行,你也可以尝试在查询字符串中使用utf-8字符来强制执行,通常会添加?utf8=✓来强制utf8进入浏览器
  • # encoding utf-8 仅当您要在源代码中直接包含 Unicode 文字时才需要在页面中,无需操作其中包含 Unicode 的字符串。
【解决方案2】:

我建议对您的字符串强制编码,例如如果文件名在名为 file_name 的变量中:

file_name = file_name.force_encoding("UTF-8")

【讨论】:

  • 我使用的是 Ruby 1.8.7,但使用 Iconv 进行编码,例如使用回形针的插值不会改变任何东西。
【解决方案3】:

您还有一个选择。尝试更改 database.yml 文件。像这样

   development:
     adapter: mysql
     encoding: utf8
     database: depot1_dev
     pool: 5
     username: root
     password: 
     host: localhost
     ...

希望能成功

【讨论】:

  • 抱歉,我们已经在 database.yml 文件中将编码设置为 utf8。
猜你喜欢
  • 2016-05-26
  • 1970-01-01
  • 2017-01-01
  • 2013-11-21
  • 2014-07-30
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 2016-12-07
相关资源
最近更新 更多