我正在使用Ruby 1.9.2,Rails 3.0.4/3.0.5和Phusion Passenger 3.0.3/3.0.4。我的模板是用HAML编写的,我正在使用MySQL2 gem。我的控制器动作在传递一个带有特殊字符(如umlaut)的参数时,会给我以下错误:
ActionView::Template::Error (incompatible character encodings: UTF-8 and ASCII-8BIT)
这个错误指向我的HAML模板的第一行,其中包含以下代码:
<!DOCTYPE html>
我的理解是由于我正在将一个UTF-8字符串与ASCII-8BIT字符串连接在一起,导致了这个错误,但我无法找出那个ASCII-8BIT字符串是什么。我已经检查了操作参数是否使用UTF-8进行了编码,并在HAML模板和Ruby文件的顶部添加了encoding: UTF-8
声明,但仍然存在此问题。我的application.rb文件中也有一个config.encoding = "UTF-8"
声明,并且以下所有内容都采用UTF-8格式:
ENV['LANG']
__ENCODING__
Encoding.default_internal
Encoding.default_external
问题在于:我无法在我的 Mac-OSX 上使用独立的 passenger 或 mongrel 在开发或生产环境中重现此结果。我只能在运行 nginx+passenger 的 Linux 生产服务器上重现它。我已经在生产服务器的控制台中验证了后面提到的所有命令都会产生 UTF-8。
您是否遇到过相同的错误,如何解决?