Rails查看编码问题

mem*_*per 5 ruby ruby-on-rails ruby-on-rails-3

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

(ActionView::Template::Error) "incompatible character encodings: ASCII-8BIT and UTF-8
Run Code Online (Sandbox Code Playgroud)

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

curl http://localhost:3000/?x=?
Run Code Online (Sandbox Code Playgroud)

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

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

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

mem*_*per 5

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

%meta{property: "og:url", content: request.url}
Run Code Online (Sandbox Code Playgroud)

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

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

成功了。