`
kong1616
  • 浏览: 103259 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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中文问题解决》。
分享到:
评论

相关推荐

    Rails的中文乱码问题

    标题中的“Rails的中文乱码问题”涉及到的是在使用Ruby on Rails框架开发Web应用时,遇到的中文字符编码不正确的问题。...通过调试和测试,可以逐步定位并解决乱码问题,实现中文内容的正确显示和处理。

    Ruby on Rails 指南 v5.0.1 中文版

    ### Ruby on Rails 指南 v5.0.1 中文版 #### Rails入门 - **前提条件**:为了能够顺利地开始Rails的学习之旅,读者需要具备一定的Ruby语言基础,并且对Web开发有一定的了解。 - **Rails是什么?**:Rails是一种...

    rails国际化

    8. **多语言路由**:如果你的应用需要根据用户选择的语言来显示不同版本的页面,Rails可以通过`scope`和`:locale`参数实现多语言路由。 9. **测试**:确保在测试环境中也正确地处理了国际化,可以编写测试用例来...

    Ruby-TranslateEnum简单零依赖Rails的Enums翻译gem

    此外,TranslateEnum还支持在ActiveAdmin或其他后台管理界面中无缝集成,确保后台管理界面中的枚举值也能正确显示翻译。 在实际开发中,TranslateEnum gem可以极大地简化多语言应用的枚举管理,提高代码的可维护性...

    gitlab提交时间显示错误问题解决.docx

    清理缓存后,重新访问GitLab网页,检查提交时间是否已经正确显示为“XXX秒前”。如果仍然存在问题,可能需要进一步排查,如确认代码修改是否正确应用,或者服务器是否成功重启。 通过以上步骤,你应该能够成功解决...

    Jquery AutoComplete firefox 中文 Ajax (option url or data) Jquery rails 自动完成

    确保服务器返回的数据格式正确,如`{"label": "关键词1", "value": "值1"}`,以便AutoComplete能够正确解析和显示。 3. **事件回调**:jQuery AutoComplete提供了丰富的事件回调函数,如`open`、`focus`、`select`...

    RoR中文解决方案(很不错哦)

    这个解决方案可能包含了特定的配置、插件或者代码调整,以确保RoR应用能正确地处理和显示中文。 描述中提到的“插件”可能是解决RoR中文问题的一种方法。在RoR中,插件是一种可以扩展和定制框架功能的方式,它们...

    Web开发敏捷之道第三版(中文版).pdf

    ### Web开发敏捷之道第三版(中文版) #### 知识点概述 本书《Web开发敏捷之道第三版》是一本深入探讨如何使用Ruby on Rails框架进行高效、敏捷的Web开发的技术书籍。书中通过一个完整的示例项目——Depot应用程序,...

    详解Ruby语言中的注释用法与中文编码问题

    这是因为默认情况下,Ruby使用ASCII编码来解析源代码文件,这可能导致中文字符显示为乱码或引发错误。 #### 解决方案 为了避免这类问题,可以采取以下两个步骤: 1. **在文件首行指定编码**:在文件的首行添加...

    Ruby在cmd下中文显示乱码以及不支持OpenSSL的问题解决

    - 执行命令 `chcp 936` 可以将CMD的编码方式改为GB2312(936),这样在CMD中就可以正常显示中文了。 ```cmd chcp 936 ``` - 如果需要切换回其他编码,只需执行相应的命令即可。例如,切换回UTF-8编码,可以执行 `...

    will_paginate 2.1.0

    `will_paginate` 是一个非常流行的 Ruby on Rails(Rails)框架中的分页库,它为开发者提供了方便的方式来处理大量数据的分页展示。版本 `2.1.0` 是这个库的一个特定版本,包含了该库在当时的一些特性、优化和可能的...

    win下安装redmine2.1

    - **中文支持不佳**:尽管 Redmine 提供了多种语言支持,但 2.1 版本中中文支持并不完善,大部分界面仍为英文。可以通过安装中文插件或更新到更高版本来改善这个问题。 - **DevKit 安装问题**:如果遇到 DevKit 安装...

    FusionCharts_Free中文开发指南

    ### FusionCharts_Free中文开发指南知识点总结 #### 一、FusionCharts_Free简介 - **概述**:FusionCharts_Free是一款由InfoSoft Global公司提供的免费版图表组件,支持跨平台、跨浏览器的应用,适用于多种开发...

    FusionCharts 参数大全 中文说明

    FusionCharts是一款由InfoSoft Global公司推出的强大的Flash图表组件,它允许用户在不涉及Flash编程的情况下,通过各种编程语言(如***, ASP, PHP, JSP, ColdFusion, Ruby on Rails等)集成图表。FusionCharts支持...

    EditPlus 3.31 Build 860 简体中文版

    * 修正: '首选项'-&gt;'常规' 的 '使用 TR1 正则表达式' 选项显示位置不正确的问题 [1014] * 修正: FTP 设置对话框布局的问题 [0907] * 修正: 不能定义颜色的问题 [0828] * 更新: 许可协议汉化 [0612] * 修正: “文档”...

    linux下redmine安装及常见问题faq

    - 导入默认数据:`RAILS_ENV=production rake redmine:load_default_data`,确保选择`zh`避免中文乱码 7. **设置目录权限** - 创建必要目录:`mkdir tmp public/plugin_assets` - 更改目录所有者和权限:`sudo ...

    FusionCharts 使用手记

    的 XML 数据支持中文 在某些情况下,我们可能需要动态生成 XML 数据来驱动 FusionCharts,比如从数据库中获取数据。...同时,对于中文字符的支持,需要注意 XML 文件的编码设置,确保 BOM 标识的正确添加。

Global site tag (gtag.js) - Google Analytics