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

从数据库中取得数据显示时报 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~~

 
原文地址:https://www.cnblogs.com/lmei/p/3224862.html