Rails中文问题解决方法(FreeBSD+MySQL)

有关Rails中文问题,在网上看了很多的解决方法,都没有成功,经过多次试验,终于成功,并且觉得网上有些内容写得不对,在这里,我总结一下我的中文处理方法。

Rails中文问题解决方案步骤

1.操作系统:FreeBSD

2.数据库是mysql 5.1.33 在安装在FreeBSD之后,在默认路径是/usr/local/mysql。 在support-files文件夹中,将一个配置文件复制到/etc中,并改名为my.cnf,这就是mysql的默认配置文件,修改此文件,在文件中的[client],[mysqld],[mysql]部分增加“default-character-set=gbk”。重启数据库,就可以将数据库一些配置改成gbk。进行数据库后,运行“ show variables like 'character_set_%';”后结果:

+--------------------------+----------------------------------+  


| Variable_name            | Value                            |  


+--------------------------+----------------------------------+  


| character_set_client     | gbk                              |   


| character_set_connection | gbk                              |   



| character_set_database   | utf8                             |   



| character_set_filesystem | binary                           |   


| character_set_results    | gbk                              |   


| character_set_server     | gbk                              |   



| character_set_system     | utf8                             |   




| character_sets_dir       | /usr/local/mysql/share/charsets/ |   



+--------------------------+----------------------------------+ 

3.rails使用2.3.3,建立rails项目后,将config/database.yml中的encoding改为gbk.

4.在编写程序时,使用utf-8编码编写.rb文件,如果页面中提交的参数中有中文,那么提交后中文后变成乱码,这样就要用gbk将参数先进行转码(这个要根据你的程序进行编写,我的程序 的公用部分这样写的)

在application_controller.rb中增加

before_filter :set_charset 



def set_charset  




    headers["Content-Type"] = "text/html; charset=utf-8" 




end 



 



#解析参数  




parameters = @request.parameters  




parameters.each do |key, value|  




 #value is being encoded if chinese  



 parameters[key] = gbk(value)  



end 



 



#from utf-8 to gb2312  




def self.gbk(text = '')  




 return '' if text.blank?  




 text = Iconv.conv('gb2312//IGNORE', 'utf-8//IGNORE', text)  




 return text  




end 

这样在写入数据库中就是中文了。

5.在取出数据库信息后要进行utf8编码

6.在输出页面中要加入“< meta http-equiv="content-type" content="text/html; charset=utf-8"/>”

相关推荐