我在升級舊的遺留的過程就是編碼錯誤的Rails 2.3的應用程序,以更現代的東西,並運行到一個編碼問題。我已閱讀了關於此問題的所有現有答案,但仍遇到問題。上的Ruby 1.9.3 Rails的2.3
Rails的版本:2.3.17 紅寶石版本:1.9.3p385
我的MySQL表的默認字符集:utf8
,整理:utf8_general_ci
。在1.9之前,我正在使用原來的mysql
寶石,沒有發生事故。升級到1.9時,檢索與它的UTF8字符什麼會得到這個證據充分的問題後:
ActionView::TemplateError (incompatible character encodings: ASCII-8BIT and UTF-8)
我切換到mysql2
寶石爲它的優越的操控,我再也看不到異常,但事情肯定不是編碼正確。例如,什麼樣的數據庫顯示爲字符串Repoussé
是由Rails的渲染爲Repoussé
,「Boat」
出現“Boatâ€
等
的詳細原因:
- 我看到了相同的結果,當我使用作爲驅動程序的寶石
ruby-mysql
。 - 我添加
encoding: utf8
線,每個條目在我database.yml
我還添加以下到我的environment.rb
:
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8
它發生,我認爲我可能有一些不匹配latin1正在被舊版本的應用程序寫入數據庫的utf8字段中,但在mysql
命令行客戶端中查看時,所有字符均正確顯示。
預先感謝任何建議,非常感謝!
更新:我現在認爲,問題是,我的UTF8數據通過二進制轉換脅迫的方式處理latin1出來的分貝,我只是不知道在哪裏。
mysql> SELECT CONVERT(CONVERT(name USING BINARY) USING latin1) AS latin1, CONVERT(CONVERT(name USING BINARY) USING utf8) AS utf8 FROM items WHERE id=myid;
+-------------+----------+
| latin1 | utf8 |
+-------------+----------+
| Repoussé | Repoussé |
+-------------+----------+
我有我的encoding
設置爲在database.yml中utf8
,任何其他的想法,其中這可以是從哪裏來的?
只是出於好奇,什麼是你的HTML頁面編碼?它是否明確設置爲「utf-8」? – mudasobwa 2013-02-27 04:22:21
好的想法,是的它是:'' – 2013-02-27 04:32:10
爲了更準確地找到問題來源,我建議你' Logger.debug'從你的模板,模型,無論你的數據。我想,這不是一個破壞數據的'''驅動程序。 – mudasobwa 2013-02-27 04:52:45