ruby-on-rails – ActionView :: Template :: Error(不兼容的字符编码:UTF-8和ASCII-8BIT)

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – ActionView :: Template :: Error(不兼容的字符编码:UTF-8和ASCII-8BIT)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用的是Ruby 1.9.2,Rails 3.0.4 / 3.0.5和Phusion Passenger 3.0.3 / 3.0.4.我的模板是用HAML编写的,我使用的是MysqL2 gem.我有一个控制器操作,当传递一个具有特殊字符的参数,像一个变音器,给我以下错误
ActionView::Template::Error (incompatible character encodings: UTF-8 and ASCII-8BIT)

错误指向我的HAML模板的第一行,其中包含以下代码

<!DOCTYPE html>

我的理解是,这是因为我有一个UTF-8字符串连接与ASCII-8BIT字符串,但我不能为我的生活找出什么ASCII-8BIT字符串.我已经检查了操作中的参数是使用UTF-8编码的,我已经在HAML模板和ruby文件的顶部添加了一个编码:UTF-8声明,我仍然收到这个错误.我的application.rb文件中也有一个config.encoding =“UTF-8”声明,以下所有结果都在UTF-8中:

ENV['LANG']
__ENCODING__
Encoding.default_internal
Encoding.default_external

这是踢球者:我无法在我的Mac-OSX上使用独立的乘客或杂种在开发或生产中复制此结果.我只能在运行Linux上的Nginx乘客的生产服务器上复制它.我已经在生产服务器的控制台中验证了后者所提到的命令都是UTF-8.

您是否遇到过同样的错误,您是如何解决的?

解决方法

在进行一些调试后,我发现使用ActionDispatch :: Request对象发生的问题,该对象恰好具有ASCII-8BIT中编码的字符串,而不管我的应用程序是否以UTF-8编码.我不知道为什么只有在Linux上使用生产服务器时才会发生这种情况,但是由于我无法在本地重现此错误,我将会假定它在Ruby或Rails中有些怪异.这个错误是由于像这样的一行:
@current_path = request.env['PATH_INFO']

当此实例变量打印在HAML模板中时,会导致错误,因为字符串以ASCII-8BIT而不是UTF-8编码.为了解决这个问题,我做了以下工作:

@current_path = request.env['PATH_INFO'].dup.force_encoding(Encoding::UTF_8)

哪个强制@current_path使用被强制进入正确的UTF-8编码的重复字符串.此错误也可能与其他请求相关的数据(如request.headers)发生.

猜你在找的Ruby相关文章