環境:
。MySQL 5.0,MySQL的環境配置為UTF8,建表也全部使用UTF8。
。IE6.0、FireFox 2.0.2
。Ruby 1.8.5 + rails 1.2.3
錯誤現象:
。用MySQL Query Browser查看MySQL數據,中文顯示正常。
。頁面顯示為亂碼,原來是中文的地方都變成了一個長方塊
。手工調整瀏覽器的頁面編碼,可以使用頁面正常顯示。但刷新后又是亂碼。
解決方法:修改config/database.yml,加入一句編碼設置如下。
development:
adapter: mysql
database: chensite_development
encoding: utf8
username: root
password: 123456
host: localhost
這時從數據庫讀取的數據顯示正常了,但*.rhtml里的原中文卻顯示變成了亂碼。據說將*.rhtml用記事本重新保存為utf-8格式可以解決,而我是用Radrails,右擊項目,在它的屬性頁的info項的text file encoding改為UTF-8。這時*.rhtml文件里的中文會變成亂碼,所以最好備份一下,然后將備份的文件內容一個個的復制粘貼過來。致此終于完美解決了中文亂碼問題。
注:
1。有些文章說要修改application.rb,在before_filter加入字符過濾代碼。我以前也試過,可行。但我覺得還是修改database.yml來得簡單一些。
2。有些文章說要同時在*.rhtml里加上如下編碼設置。我發現這一句可加可不加,對頁面編碼顯示沒有任何影響。
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
3。還有的人說修改environment.rb加入兩行 $KCODE = 'u' 和 require 'jcode' 。這里似乎沒有必要。也許這是老版Rails的解決方法。
4。有的人說在建表的時候不能用InnoDB,但我的建表語句如下,是用InnoDB。沒有發現問題。
create table modules (
id int not null auto_increment,
..........
expanded tinyint(1) default 0,
primary key (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;