有关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"/>”
这样就可能正确显示中文了,总之,转码的过程是:utf8->gbk这是从页面到数据库的过程,从数据库到页面是gbk->utf8。
这样就介绍了Rails中文问题的解决方法。本文来自Ming's Blog:《Rails, Mysql, FreeBSD中文问题解决》。
【编辑推荐】