rails 如何正确显示中文??

数据库,还是页面显示中文
数据库
  development:
  adapter: mysql
  encoding: utf8
  …………
页面乱码改.rhtml文件编码为uft-8。
在使用ROR制作web程序时,如果向rhtml视图文件中输入中文,显示在网页上就成了乱码。为了解决这一问题,可以在保存 rhtml文件时把文件编码设为UTF-8

在使用ROR制作web程序时,如果向rhtml视图文件中输入中文,显示在网页上就成了乱码。为了解决这一问题,可以在保存rhtml文件时把文件编码设为UTF-8,


这两天玩Ruby On Rails,测试中文输入的时候总是乱码。在Ruby On Rails的wiki里有一篇How To Use Unicode Strings,照着上面做,解决了部分问题,可在输入一些文字时仍然乱码,而且不是什么特殊的字符,比如“可”这个字,怎么都不对。google了半天也没有什么有价值的东西,最后祭出 delicious,居然在rubyonrails+unicode的tag下找到了一篇Getting Unicode, MySql and Rails to Cooperate,终于解决了问题,目前看来还没有新问题出现。
总结一下,大概有这样几个要点:
在MySql这边,
1. 需要把Table的Type设置成为MyISAM而不是InnoDB。
2. 将Charecter设置成为utf8
就象这样:

    create table samples (
    id int not null auto_increment,
    foo varchar(100) not null,
    bar text not null,
    primary key (id)
    ) Type=MyISAM CHARACTER SET utf8;

在Ruby On Rails这边,
1. 要设置enviroment.rb,加入

    $KCODE = ‘u’
    require ‘jcode’

2.在application.rb的ApplicationController中加入charset的设置,并显示告知 MySql使用UTF8

    class ApplicationController < ActionController::Base
    before_filter :configure_charsets

    def configure_charsets
    @response.headers[”Content-Type”] = “text/html; charset=utf-8″
    # Set connection charset. MySQL 4.0 doesn’t support this so it
    # will throw an error, MySQL 4.1 needs this
    suppress(ActiveRecord::StatementInvalid) do
    ActiveRecord::Base.connection.execute ‘SET NAMES UTF8′
    end
    end
    end

然后就大功告成了。

转自http://dujie118.spaces.live.com/portal_skins/custom/document_view/manage_workspace/
————————————————————————————————————
初学Rails,简单的做了一个例子,发现存在中文问题。
大致中文问题归类如下:
       1、页面无法显示中文,产生中文乱码
       2、Mysql数据库采用utf8后,页面采用utf8,数据库保存是乱码,但页面显示正常。
       3、时间格式在页面上的中文显示产生乱码。
打开:application.rb:修改代码如下显示:
1 class ApplicationController < ActionController::Base
2 before_filter :set_charset
3 def set_charset
4 @headers["Content-Type"] = "text/html; charset=utf-8"
5 end
6 end
同时对页面(*.rhtml)上进行增加编码控制:
<meta http-equiv="Content-type" content="text/rhtml; charset=utf8" />
同时在保存页面时,进行编码转换成utf8格式。
做完以上工作的话,利用mysql数据库客户端工具Navicat查看数据库,你会发现数据库中保存的中文数据会出现乱码,因此需要进一步处理:
1、建数据库时采用utf8编码进行建库,同时建表或者导表时要注意采用utf8编码。
2、采用Navicat连接数据库时在Advanced Settings中选择Encoding编码为utf8,同时取消Use MySQL character set的默认选项,再进行连接。
进行以上设置,将会在数据库中显示出正常的中文。同时页面上显示也会是中文,但你会发现对于时间的显示上仍然存在一些小问题。因此在输出时间时需要进行(original_date.strftime("%Y/%m/%d"))转换格式。
完成。
继续学习中......,发现新的问题,再更新。
——————————————————————————————————————————————
mysql采用utf-8后,对中文的排序是不对的。还应用gbk
——————————————————————————————————————————————————
有关Rails中文问题,在网上看了很多的解决方法,都没有成功,经过多次试验,终于成功,并且觉得网上有些内容写得不对,在这里,我总结一下我的中文处理方法。

Rails中文问题解决方案步骤

1.操作系统:FreeBSD

2.数据库是mysql 5.1.33 在安装在FreeBSD之后,在默认路径是/usr/local/mysql。 在support-files文件夹中,将一个配置文件复制到/etc中(或者/etc/mysql中),并改名为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中文问题解决》。

你可能感兴趣的:(mysql,Ruby,FreeBSD,ActiveRecord,Rails)