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"/>”