实在不好意思在开这样的帖子,关于这个问题的帖子也不少了,不过找了一堆还是没有解决。
这个问题一般的解决方法:
[quote]
1.在radrails中,请在project的property对话框中,左边选中info节点,右边设置编码方式为UTF-8
2.修改MySQL的配置文件C:\Program Files\MySQL\MySQL Server 5.0\my.ini,改其中的两处default-character-set=utf8,改完后重启MySQL(windows服务)。这一步也可采 用instance wizard来做。
3.运行你的建库脚本,建库脚本中无须涉及到任何编码问题。
4. 修改ApplicationController 如下:
ruby 代码
- class ApplicationController < ActionController::Base
- before_filter :configure_charsets
-
- def configure_charsets
- @response.headers["Content-Type"] = "text/html; charset=utf-8"
- suppress(ActiveRecord::StatementInvalid) do
- ActiveRecord::Base.connection.execute 'SET NAMES utf8'
- end
- end
- end
5.请在rhtml中,或者适当的layout中,加上:
至此,无论是在Mysql中,前台页面中,还是在IDE中,都能正常使用中文
6.关于ruby本身的中文字串处理问题,例如size,substring等,请查看此文
http://www.blogjava.net/cap/archive/2006/12/14/87830.html
[/quote]
这在railscn.com上已经结帖了,别处也是乎大同小异。
但:
一、页面中文问题是乎不用这麻烦:
只要将rails所有的文件用utf-8格式保存(其它的都可不要),就可是很好的支持中文显示。
在rails 1.1.6和1.2.2下都测试正常(windows和linux都测试过)
二、mysql中文问题却比较麻烦:
1.rails所有的文件用utf-8格式保存,将mysql的编码为utf-8,页面可以正常读、写、显示,可mysql所是一堆乱码。
2.然后layout中,加上: ,没有解决问题
3.接着,修改ApplicationController 如下:
ruby 代码
- class ApplicationController < ActionController::Base
- before_filter :configure_charsets
-
- def configure_charsets
- @response.headers["Content-Type"] = "text/html; charset=utf-8"
- end
- end
没有解决问题
4.继承修改ApplicationController
ruby 代码
- class ApplicationController < ActionController::Base
- before_filter :configure_charsets
-
- def configure_charsets
- @response.headers["Content-Type"] = "text/html; charset=utf-8"
- suppress(ActiveRecord::StatementInvalid) do
- ActiveRecord::Base.connection.execute 'SET NAMES utf8'
- end
- end
- end
于是得到如下错误:
ActiveRecord::StatementInvalid in CompanyuserController#create
Mysql::Error: #HY000Incorrect string value: '\xE5\x9C\xA8' for column 'name' at row 1: INSERT INTO company_users (`name`, `companyId`, `username`, `tel`, `note`, `address`) VALUES('在', 245, '', '', '', '')
RAILS_ROOT: ./script/../config/..
suppress方法我并不熟悉,大概是使执行数据库操作时使用utf-8编码。
5.又看到一种方法:在database.yml文件中加上 encoding: utf8。
于是,去掉2、3、4运行,依然得到4的错误。加上2、3、4(一步一步加)错误依旧。
这个问题,我怀疑Http请求将utf8编码转换在gb2312,由是就将mysql改为utf8结果,存入数据库的数据仍然出现。
看到
bd7lx的博客上有一篇文章《
gettext 汉化的*正规*正轨*而且还是简单的方法
》是乎是解决之道,但没有试用。还是想明白在无插件下怎么解决mysql中文问题以及原理。