Rails查看编码问题

我正在使用Ruby 2.0和Rails 3.2.14。 我的观点是几个UTF-8字符,主要是บาท和د.إ等货币符号。我注意到了一些

(ActionView::Template::Error) "incompatible character encodings: ASCII-8BIT and UTF-8 

在我们的生产代码中,并立即尝试访问我的浏览器页面url没有任何问题。 在挖掘中,我意识到错误实际上是由BingBot和几只蜘蛛引起的。 因此,当我尝试curl相同的url时,我能够重现这个问题。 所以,如果我尝试

 curl http://localhost:3000/?x=✓ 

我得到了视图代码中使用UTF-8符号的错误。 我还意识到,如果使用HTML编码的字符串代替符号,则不会发生这种情况。 但是,我更喜欢使用实际符号。

我已经尝试在environment.rb中设置Encoding.default_external = Encoding :: UTF_8,将#encoding:utf-8魔术注释添加到文件顶部,但它没有帮助。

那么,为什么会出现这种错误呢? 除了cookie之外,在浏览器和CURL上点击此URL有什么区别? 我如何解决此问题并允许BingBot为我们的网站编制索引? 谢谢。

在我的模板中泄漏非UTF-8字符的罪魁祸首是Facebook Open Graph的无害元标记

 %meta{property: "og:url", content: request.url} 

当请求是非标准的时,这会导致编码问题。 将其更改为

 %meta{property: "og:url", content: request.url.force_encoding('UTF-8')} 

成功了。

当您尝试使用不同的字符编码连接字符串时,通常会出现该错误消息。

您的数据库是否也设置为使用UTF-8?

如果没有,当您尝试将非UTF8值插入UTF-8模板时,可能会出现问题。