Rails4.0 -- 编码错误导致无法显示(二)

Rails4.0 -- 编码错误(二)

从数据库中取得数据显示时报 incompatible character encodings: GBK and ASCII-8BIT或 incompatible character encodings: UTF-8 and ASCII-8BIT的错误

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

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

在《Rails4.0 -- 编码错误(一)》(链接: http://www.cnblogs.com/lmei/p/3205504.html)中介绍的方法需要在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~~

 

你可能感兴趣的:(Rails)