2010-03-10 90 views
1

默認情況下Rails允許我們的應用程序輸入非UTF8數據,如用戶:¶®«¼妥善處理Unicode字符Rails中

然而,當我們試圖從數據庫中檢索數據,呈現在模板的Rails錯誤地認爲它是UTF-8格式並引發錯誤。

ArgumentError: invalid byte sequence in UTF-8 

處理這個問題的最佳方法是什麼?我看到了一個修復程序,建議在用戶可以輸入的每個地方清理數據。但是,這將涉及更改大量的代碼,並且會完全刪除這些字符。理想情況下,我們希望將一些字符轉換爲UTF-8等效字符。

我們的環境:

Ruby: 1.9.1 
Rails 2.3.5 
MySql Gem: 2.8.1 

這是我們的一個嚴重而緊迫的問題,所以你的答案非常讚賞!

+0

'NPUT非UTF8數據,如xxx' - 爲什麼這些字符不是UTF8?我可以看到,'在每個地方清理數據'與編碼無關。這意味着確保用戶不會注入無效的字符串(例如''tags等)。 很遺憾,你在數據庫中看到了什麼,你有什麼類型的列? – 2010-03-10 03:16:48

+0

我不知道解決方案,但如果這是迫切的,開始賞金可能是一個好主意。 – kikito 2010-03-10 09:43:55

+0

Dmitriy:我認爲問題可能是數據庫編碼從Latin1切換到UTF8而沒有清理數據。我試圖將它切換回latin1而沒有運氣,Rails仍將它視爲UTF8。 數據庫編碼:utf8 表編碼:utf8 列類型:文本 切換數據庫和表編碼不能解決問題。 Rails仍然認爲這個字符串是UTF8編碼的。 egarcia:謝謝你的建議。我會添加一個賞金,但是你必須等兩天才能添加一個賞金。 – Gdeglin 2010-03-10 12:04:02

回答

0

嘗試使用mysql2 gem(版本0.1.6或更高版本)而不是mysql。

它還是相當新的,但一直在生產中很好地工作,並將從數據庫中檢索所有字符串作爲utf-8。

剛剛安裝的寶石和改變你的database.yml文件,以包含「適配器:mysql2」