作者giive (lala)
看板Ruby
标题 在 Rails 上面使用 Unicode
时间Thu Oct 12 08:13:15 2006
出自我的Blog
http://lightyror.blogspot.com/2006/10/rails-unicode.html
如何在 Rails 上面使用 Unicode 是个好问题
基本上,虽然 Ruby 不完整支援 Unicode
但是使用上问题不大
将 Unicode 资料从资料库取出,操作,output 出
或是在程式里面使用像是
if a == '我是中文呀'
这类的东西都没有任何问题
但是如果我们讨论到如何在 Rails 上面使用 Unicode就有很多其他的议题了
因为 Rails 牵涉到 Web Server ,HTML,资料库等等外部的程式
一定要每个节点Unicode设定正确才会正常显示
Rails Conf 2006 Eourpe 有讨论到 Unicode for Rails 的议题
里面讲到几个基本的使用方式
以下都是使用UTF-8当作范例
1.
你的HTML 是否正确宣告 Unicode ?
请在 head 里面加入
< meta equiv="Content-type" content="text/html; charset=utf-8" >
这样的选项
2.
如果使用到字串的函数,你是否有呼叫 KCODE 这个 lib
如果你想使用字串相关的函数,Ruby 是会误判Unicode字串里面长度之类的属性的
我们必须在 config/enviroment.rb 里面加入
$KCODE='utf8'
这样的选项,Rails 才会切到 UTF-8 Mode
如此,regular expression 如果使用 u flag 就可以判断 UTF-8 字串
pack / unpack 才会 work
字串的长度才会正确
3.
资料库里面是否正确使用Unicode 编码
如果是 MySQL ,请用 phpMyAdmin 确定您的编码是否正确
(话说回来,phpMyAdmin 新版居然有显示 utf-8 乱码的问题.... )
4.
资料库连线是否正确使用
请看看您的 config/database.yml ,是否有下面红字那一行
他会将连线的mode 切换到 utf-8
production:
user: root
host: localhost
encoding: utf8
5.
Web Server 是否预设使用 UTF-8 编码
Apache 必须设定
AddDefaultCharset utf-8
Lighttpd 要在 mime type 设定
mimetype.assign = (
".css" => "text/css; charset=utf-8",
".gif" => "image/gif",
".htm" => "text/html; charset=utf-8",
".html" => "text/html; charset=utf-8",
".jpeg" => "image/jpeg",
".jpg" => "image/jpeg",
".js" => "text/javascript; charset=utf-8",
".png" => "image/png",
".swf" => "application/x-shockwave-flash",
".txt" => "text/plain; charset=utf-8"
)
不然可能会有 Javascript 显示中文的问题
(老实说,我并不太确定如果 Web Server 不设定UTF-8 ,那是否一定会有问题,反正我都这样设定好)
6.
当这些都确定无误,还有问题,请确认
你的档案编码是否为 Unicode 编码
通常这个问题是最常发生的
7.
我们可以写一个 filter
def set_encoding
headers['Content-Type'] ||= 'text/html'
if headers['Content-Type'].starts_with?('text/') and !headers['Content-Type'].include?('charset=')
headers['Content-Type'] += '; charset=utf-8'
end
end
让 render 出来的 html 都是 UTF-8 encoding
但是 Rails 1.2 将会在 config 里面新增
ActionController::Base.default_charset=(encoding)
这样的设定
所以其实我们不需要写 filter 就可以直接 render unicode 档案
--
lighty RoR 是一个介绍 lighttpd , SQLite , Ruby and Rails 的 Blog
http://lightyror.blogspot.com/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.103.141