2009-08-28 35 views
9

我使用rails 2.3.3和ruby 1.9.1。紅寶石軌上的編碼問題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內容領域就好如果我直接使用該字段在視圖(當它不是在部分)。

我該如何解決這個問題? 我已經嘗試設置默認編碼,但似乎沒有工作。

+0

你是如何設置默認編碼的?你能舉一個例子嗎? – 2009-08-28 05:13:49

回答

9

我剛剛有這個,所以我認爲它的價值有正確的答案。

2.8.1 MySql gem不是utf-8友好的,所以它有時會返回UTF字符串並且說謊給Rails,告訴它它們是ASCII,而事實上它們是UTF-8。這使得事情爆炸。

所以:你可以猴子補丁或獲得兼容的MySql寶石。請參閱: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位時兼容。

+1

證明mysql-gem是罪魁禍首。 它將所有字符串作爲ASCII-8BIT返回,即使它們是DB中的UTF8也是如此。使用http://github.com/hectoregm/mysql-ruby/tree/master修復了這個問題 – tliff 2009-08-28 12:36:22

+0

對不起molf,遇到這個問題後我就低估了這個原因,以及它是mysql的gems錯誤,我相信這個bug有點沒有人真的確定它是否是一個問題。 – 2009-12-06 10:11:11

0

Ruby 1.9x和mysql gem之間似乎存在不兼容的問題,因爲字符串是如何來回傳遞的(特別是字符串的編碼)。

要解決,運行

gem install mysql2 
在服務器上

,並更新數據庫配置文件,而不是使用前一個這種寶石。