2012-07-07 69 views
0

我剛剛從Ruby 1.8.7遷移到Ruby 1.9.2,並且一直在徘徊在字符串編碼問題上。我的MySQL數據庫全是utf8,但每次我從它查詢並查找字符串編碼時,都會得到ASCII-9BIT。Ruby 1.9.x和字符串編碼

ruby-1.9.2-p180 :002 > Artist.find(1043).name.encoding 
=> #<Encoding:ASCII-8BIT> 

因此,像西格爾羅斯這樣的藝術家打印出「Sigur R \ xC3 \ xB3s」。原來,這導致了一些問題,因爲我的客戶端應用程序期望UTF8 json被我的服務器返回(因爲它一直是這種情況)。臨時解決方法似乎在我的代碼中加入了force_encoding("UTF-8"),但是它感覺非常混亂,特別是因爲Ruby 1.8.7不需要這些。

我嘗試在我的env文件中添加編碼魔法註釋Encoding.default_external,我的database.yml文件中添加了encoding參數,沒有任何效果。

我該如何處理Ruby 1.9.x和字符串編碼?

-

編輯:在我的其他的Rails應用程序(這一直是紅寶石1.9.2自一開始),所有MySQL的弦似乎在UTF-8編碼。但數據庫/表編碼/字符集是完全一樣?!

+0

http://blog.grayproductions.net/articles/ruby_19s_string – Zabba 2012-07-07 18:38:55

+0

你如何連接到你的MySQL數據庫?你設置了連接字符串嗎?你是否指定了字符集?字符集= UTF8; – phoet 2012-07-07 18:42:46

+0

@phoet就像我說的,我在我的database.yml文件中有'encoding'參數。我所有的表都將編碼/字符集設置爲utf8。 – samvermette 2012-07-07 18:44:33

回答

0

那麼,更新到Rails 3.1.3和mysql2 0.3.10似乎已經解決了我的問題(運行Rails 3.0.3和mysql2 0.2.6)。雖然對我來說似乎很奇怪,因爲Ruby 1.9已經超過3歲了,Rails 3.0.3在此之後發佈,所以我不明白爲什麼Rails 3.0.x不適合Ruby 1.9的新字符串編碼。如果有人能加上這個,我將不勝感激。