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
這是我們的一個嚴重而緊迫的問題,所以你的答案非常讚賞!
'NPUT非UTF8數據,如xxx' - 爲什麼這些字符不是UTF8?我可以看到,'在每個地方清理數據'與編碼無關。這意味着確保用戶不會注入無效的字符串(例如''tags等)。 很遺憾,你在數據庫中看到了什麼,你有什麼類型的列? – 2010-03-10 03:16:48
我不知道解決方案,但如果這是迫切的,開始賞金可能是一個好主意。 – kikito 2010-03-10 09:43:55
Dmitriy:我認爲問題可能是數據庫編碼從Latin1切換到UTF8而沒有清理數據。我試圖將它切換回latin1而沒有運氣,Rails仍將它視爲UTF8。 數據庫編碼:utf8 表編碼:utf8 列類型:文本 切換數據庫和表編碼不能解決問題。 Rails仍然認爲這個字符串是UTF8編碼的。 egarcia:謝謝你的建議。我會添加一個賞金,但是你必須等兩天才能添加一個賞金。 – Gdeglin 2010-03-10 12:04:02