• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

或 incompatible character encodings: UTF-8 and ASCII-8BIT的错误

 

具体表现为:数据库中的中文不是乱码,取出来在页面显示时报编码错误。
原因是刚从数据库取出来的时候字符串是ASCII-8BIT,尽管已经在database.yml中设置encoding:utf-8但是无效。
已知有数据表Customers(id, name, phone)
表中的name在数据库中设置是UTF-8,它在数据库中的数据是中文,且数据库中的中文不是乱码
但是从数据库中读取出来时,编码错误! @_@?!
 
解决方案是: 在models文件夾中找到customer.rb文件 (注:ruby1.9,1.9以下没有force_encoding())
原来的代码是: 
1 class Customer < ActiveRecord::Base
2   attr_accessible :name, :phone
3 end
 
通过是用get_name方法将从数据库读出来的name字段的值进行转码
修改customer.rb,代码如下:
class Customer < ActiveRecord::Base
  def get_name
    return self.name.force_encoding(Encoding.default_internal)
  end
  attr_accessible :name, :phone
end
 
注:转码的方法名是要进行转码的属性名前面加“get_”,如:要将name转码,方法名为get_name
 
接着将显示读出数据界面的代码进行修改,比如我的显示界面是在views文件夾下面customers中的index.html.erb
原来的代码是:
<% @customers.each do |customer| %>
      ……
        <td><%= customer.name %></td>
       ……
<% end %>
 
修改后的代码,如下:
1 <% @customers.each do |customer| %>
2       ……
3         <td><%= customer.get_name %></td>
4        ……
5 <% end %>
 
参考链接:http://314858770.iteye.com/blog/687978
 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ruby学习系列--DBI函数集发布时间:2022-07-13
下一篇:
【Ruby】require背后的故事发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap