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

我在生产中遇到不兼容的字符编码错误。 我尝试在本地重现它,但没有运气。 这是错误消息:

A ActionView::Template::Error occurred in controller_name#action_name: incompatible character encodings: UTF-8 and ASCII-8BIT activesupport (3.0.5) lib/active_support/core_ext/string/output_safety.rb:80:in `concat' 

config.encoding已在application.rb中设置为“utf-8”。 让我感到困惑的是,这个问题在乘客重启后只持续了一段时间,并在一段时间后消失。 进一步调试exception回溯给了我这个:

 activesupport (3.0.5) lib/active_support/core_ext/string/output_safety.rb:80:in `concat' activesupport (3.0.5) lib/active_support/core_ext/string/output_safety.rb:80:in `concat' actionpack (3.0.5) lib/action_view/template/handlers/erb.rb:14:in `<<' app/views/web/controller_name/action_name.erb:98  Line 98: <a href="https://stackoverflow.com/questions/20075740/dealing-with-incompatible-character-encodings-utf-8-and-ascii-8bit/" id="xyz"> 

在“ ActionView :: Template :: Error(不兼容的字符编码:UTF-8和ASCII-8BIT) ”中提到ActionDispatch::Request可能会导致问题,但我对一段时间后问题如何修复自己一无所知!

如果您使用来自数据库的任何文本收到此错误,则需要使用mysql2而不是database.yml中的mysql适配器。 并在你的Gemfile中添加mysql2 gem。 这将解决您的问题。

尝试通过将# encoding: UTF-8到文件的顶部来将文件编码设置为UTF-8。