您的位置:首页 > 编程语言 > Ruby

ruby -- 问题解决(四)编码错误导致无法显示(2)

2013-07-30 12:12 369 查看
从数据库中取得数据显示时报 incompatible character encodings: GBK and ASCII-8BIT
或 incompatible character encodings: UTF-8 and ASCII-8BIT的错误


具体表现为:数据库中的中文不是乱码,取出来在页面显示时报编码错误。

原因是刚从数据库取出来的时候字符串是ASCII-8BIT,尽管已经在database.yml中设置encoding:utf-8但是无效。

在《ruby -- 问题解决(三)编码错误导致无法显示(1)》中介绍的方法需要在models文件夾中的多个.rb文件进行修改,这样显得繁琐好多。

下面介绍一个方法:在helpers文件中找到你要修改的文件,比如:admin_helper.rb

自定义一个转码函数:def encodingChange


module AdminHelper
def encodingChange(attr)
return attr.force_encoding(Encoding.default_internal)
end
end


接着就可以在需要显示中的页面中调用该函数啦!

注:如果要转码的字段刚好为空的话,使用上面的转码方法会报错,所以修改如下,


module AdminHelper
def encodingChange(attr)
if !attr.nil?
return attr.force_encoding(Encoding.default_internal)
end
end
end


加个判断即可~~ 接下来进行转码,

转码之前的代码:


<% @admins.each do |admin| %>
……
<td><%= admin.companyName %></td>
……
<% end %>


调用转码函数之后的代码


<% @admins.each do |admin| %>
……
<td><%= encodingChange(admin.companyName) %></td>
……
<% end %>


@_@!! over~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐