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

开发 开发工具
Rails中文问题的解决方法有很多,但视情况不同,未必都有用。本文介绍在FreeBSD下,MySQL 5.1.33和Rails 2.3.3下如何解决Rails中文问题。

有关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_%';”后结果:

  1. +--------------------------+----------------------------------+  
  2. | Variable_name            | Value                            |  
  3. +--------------------------+----------------------------------+  
  4. | character_set_client     | gbk                              |   
  5. | character_set_connection | gbk                              |   
  6. | character_set_database   | utf8                             |   
  7. | character_set_filesystem | binary                           |   
  8. | character_set_results    | gbk                              |   
  9. | character_set_server     | gbk                              |   
  10. | character_set_system     | utf8                             |   
  11. | character_sets_dir       | /usr/local/mysql/share/charsets/ |   
  12. +--------------------------+----------------------------------+ 

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

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

在application_controller.rb中增加

  1. before_filter :set_charset 
  2. def set_charset  
  3.     headers["Content-Type"] = "text/html; charset=utf-8" 
  4. end 
  5.  
  6. #解析参数  
  7. parameters = @request.parameters  
  8. parameters.each do |key, value|  
  9.  #value is being encoded if chinese  
  10.  parameters[key] = gbk(value)  
  11. end 
  12.  
  13. #from utf-8 to gb2312  
  14. def self.gbk(text = '')  
  15.  return '' if text.blank?  
  16.  text = Iconv.conv('gb2312//IGNORE''utf-8//IGNORE', text)  
  17.  return text  
  18. 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中文问题解决》。

【编辑推荐】

  1. Ruby on Rails入门之道
  2. Ruby on Rails 2.3.3发布 主要修复Bug
  3. Ruby on Rails开发的五点建议
  4. 浅谈Ruby和JRuby的学习
  5. Web开发谁更高效 Java对决Ruby on Rails
责任编辑:yangsai 来源: Ming's Blog
相关推荐

2009-07-17 14:33:05

Jython中文问题

2011-03-18 18:47:34

QtMySQL

2009-06-09 15:51:07

Java ee中文问题解决方法

2009-02-18 14:28:23

编码乱码JSP

2009-12-28 10:56:45

WPF Image

2011-06-14 13:41:27

muleWSDL

2010-07-29 15:28:47

Flex安全沙箱

2009-02-26 11:13:41

Weblogic中间件JSP

2010-06-09 16:33:46

Cacti中文

2010-05-26 11:08:33

SVN管理

2010-08-03 09:12:52

Flex安全沙箱

2011-06-13 16:16:32

Qt 中文问题

2011-05-18 14:00:30

在线备份

2010-01-13 21:06:37

双绞线

2009-11-17 10:43:59

ubuntu 9.10输入法解决方法

2010-05-11 15:09:51

Unix系统

2009-10-29 10:04:57

VB.NET Read

2010-12-31 16:31:08

服务器常见问题

2013-06-14 10:48:53

IIS 7

2009-12-21 18:39:24

WCF字符串过长问题
点赞
收藏

51CTO技术栈公众号