不兼容的字符编码:UTF-8和ASCII-8BIT
我发现关于这个错误信息的旧信息很多,但是关于它的建议很少,想知道当前情况如何,因为似乎在网络上对它的讨论越来越少了。当我尝试从包含重音字符(例如'é')的区域设置文件中呈现文本时,就会出现这个错误。
我正在使用rails 3.0.3、ruby 1.9.2(也尝试过1.8.7,结果相同)、mysql2适配器、utf8编码。
不兼容的字符编码:UTF-8和ASCII-8BIT
我发现关于这个错误信息的旧信息很多,但是关于它的建议很少,想知道当前情况如何,因为似乎在网络上对它的讨论越来越少了。当我尝试从包含重音字符(例如'é')的区域设置文件中呈现文本时,就会出现这个错误。
我正在使用rails 3.0.3、ruby 1.9.2(也尝试过1.8.7,结果相同)、mysql2适配器、utf8编码。
当我的Ruby应用程序解析字符串的方式与数据库存储字符串的方式不一致时,我会遇到这个错误。这是由编码不匹配引起的。
如果我正在处理UTF-8,我会确保在相关的.rb文件顶部加入以下内容来解决这个问题:
# encoding: utf-8
另外,你可以通过在应用配置文件中使用这行代码来全局设置默认的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
我记得曾经通过使用 "string".force_encoding("UTF-8") 来解决这个问题。
目前,这可能是由于Mail 2.5.4中的一个问题导致邮件对象的编码被“污染”。
@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