从数据库中取得数据显示时报 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
1 module AdminHelper 2 def encodingChange(attr) 3 return attr.force_encoding(Encoding.default_internal) 4 end 5 end
接着就可以在需要显示中的页面中调用该函数啦!
注:如果要转码的字段刚好为空的话,使用上面的转码方法会报错,所以修改如下,
1 module AdminHelper 2 def encodingChange(attr) 3 if !attr.nil? 4 return attr.force_encoding(Encoding.default_internal) 5 end 6 end 7 end
加个判断即可~~ 接下来进行转码,
转码之前的代码:
1 <% @admins.each do |admin| %> 2 …… 3 <td><%= admin.companyName %></td> 4 …… 5 <% end %>
调用转码函数之后的代码
1 <% @admins.each do |admin| %> 2 …… 3 <td><%= encodingChange(admin.companyName) %></td> 4 …… 5 <% end %>
@_@!! over~~