【问题标题】:Encoding problems in rails on ruby 1.9.1ruby 1.9.1 上 Rails 中的编码问题
【发布时间】:2013-05-15 15:24:59
【问题描述】:

我正在使用 rails 2.3.3 和 ruby​​ 1.9.1。

我正在尝试渲染包含部分视图的视图。在部分 i 中,输出以 UTF8 编码的模型字段。 这失败了

ActionView::TemplateError (incompatible character encodings: ASCII-8BIT and UTF-8) on line #248 of app/views/movie/show.html.erb:
245:    <!-- Coloumn right | start -->
246:    <div class="col_right">
247: 
248:        <%= render :partial => 'movie_stats' %>
249: 
250:        <!-- uploaders -->
251:        <div class="box_white">     

另一方面,如果我直接在视图中使用该字段(当它不在部分中时),我可以输出带有 utf8 内容的字段。

我该如何解决这个问题? 我已经尝试设置默认编码,但似乎不起作用。

【问题讨论】:

  • 您是如何尝试设置默认编码的?能给我们举个例子吗?

标签: ruby-on-rails ruby


【解决方案1】:

我也有这个,所以我认为它值得拥有正确的答案。

2.8.1 MySql gem 对 utf-8 不友好,所以它有时会返回 UTF 字符串并欺骗 Rails,告诉它它们是 ASCII 而实际上它们是 UTF-8。这会让事情爆炸。

所以:您可以使用猴子补丁或获取兼容的 MySql gem。见:http://gnuu.org/2009/11/06/ruby19-rails-mysql-utf8/

【讨论】:

    【解决方案2】:

    在 Ruby 1.9 中 ERB 的编码似乎存在问题。更多细节在this Lighthouse ticket。带有解决方法has been included 的补丁,也许它对你有用?

    问题是 ruby​​ 1.9 发行版中的 erb 代码。当它编译模板代码时,它强制使用“ASCII-8bit”编码,问题是当模板代码具有多字节字符时,模板代码以“ASCII-8bit”字符串返回,并且当此字符串与“UTF8”连接时带有多字节字符的字符串会引发异常,因为这种编码之间的字符串仅在两者都只有 7 位字符时才兼容。

    【讨论】:

    • 原来 mysql-gem 是罪魁祸首。它以 ASCII-8BIT 形式返回所有字符串,即使它们在数据库中是 UTF8。使用github.com/hectoregm/mysql-ruby/tree/master 修复它
    • 对不起 molf,我在遇到此问题后对此原因投了反对票,这也是 mysql gems 故障,我相信该错误处于不确定状态,没有人真正确定它是否有问题。跨度>
    【解决方案3】:

    Ruby 1.9x 和 mysql gem 在字符串如何来回传递(特别是字符串的编码)方面似乎不兼容。

    要修复,运行

    gem install mysql2 
    

    在服务器上并更新数据库配置文件以使用此 gem 而不是以前的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-16
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      • 2015-08-16
      相关资源
      最近更新 更多