Rails 3 - (不兼容的字符编码:UTF-8和ASCII-8BIT):

时间:2010-12-16 22:04:48

标签: encoding utf-8 ruby-on-rails-3

不兼容的字符编码:UTF-8和ASCII-8BIT

我发现了很多旧的信息,但对这个错误信息的建议很少,但想知道目前的情况是什么,因为网上的讨论似乎较少。当我尝试从包含重音字符的语言环境文件中呈现文本时,例如'é',就会出现这种情况。

我正在使用rails 3.0.3,ruby 1.9.2(并且尝试了1.8.7同样的结果),mysql2适配器,utf8编码。

3 个答案:

答案 0 :(得分:3)

当我的Ruby应用程序解析字符串以及数据库如何存储它们之间存在encoding mismatch时,我收到此错误。

为了在我处理UTF-8时为自己解决这个问题,我确保在相关的.rb文件的顶部有这个:

# encoding: utf-8

或者,您可以使用this line在应用程序配置文件中全局设置默认的UTF-8编码:

Encoding.default_internal, Encoding.default_external = ['utf-8'] * 2

最后,我通过在database.yml中设置 encoding 选项来确保我的数据库在内部使用UTF-8:

development:
  adapter: postgresql
  encoding: UTF8
  database: pg_development
  username: abe
  pool: 5

答案 1 :(得分:2)

我记得使用“string”.force_encoding(“UTF-8”)

来解决这个问题。

答案 2 :(得分:2)

目前,这可能是由邮件2.5.4中的issue引起的,它会“污染”邮件对象的编码。

@email = Email.find(1)
@email.body.encoding # This is a fresh instance from db, still okay
Mail.new(@email.body)
@email.body.encoding # value has been changed