在Ruby 1.9.1上的Rails编码问题

9

我正在使用Rails 2.3.3和Ruby 1.9.1。

我试图呈现一个包含局部视图的视图。在局部视图中,我输出了一个使用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内容的字段。

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


你尝试过如何设置默认编码?你能给我们举个例子吗? - Ryan Bigg
3个回答

9
我也遇到了同样的问题,所以我认为有必要提供正确的答案。
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的编码存在问题。更多细节请参见此Lighthouse票。已经包含了一个补丁以解决此问题,或许对您有帮助?

问题出现在Ruby 1.9分发版本的erb代码中。当它编译模板代码时,它会强制使用“ASCII-8bit”编码。问题在于,当模板代码具有多字节字符时,模板代码将以“ASCII-8bit”字符串返回。当此字符串与具有多字节字符的“UTF8”字符串连接时,会引发异常,因为这些编码之间的字符串仅在两者都只有七位字符时才兼容。


1
原来是mysql-gem出了问题。即使在数据库中它们是UTF8,它也将所有字符串返回为ASCII-8BIT。使用http://github.com/hectoregm/mysql-ruby/tree/master解决了这个问题。 - tliff
抱歉molf,我给这个点踩了,因为我也遇到了这个问题,是mysql gems的问题,我认为这个bug处于一种悬而未决的状态,没有人真正确定它是否是一个问题。 - Sam Saffron

0

在Ruby 1.9x和mysql gem之间似乎存在不兼容性,涉及到字符串如何来回传递(特别是字符串的编码)。

要解决这个问题,请运行

gem install mysql2 

在服务器上安装并更新数据库配置文件,使用这个 gem 替换之前的 gem。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接