从数据库中取得数据显示时报 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())
原来的代码是: 
 class Customer < ActiveRecord::Base
attr_accessible :name, :phone
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 %>
 
修改后的代码,如下:
 <% @customers.each do |customer| %>
……
<td><%= customer.get_name %></td>
……
<% end %>
 
参考链接:http://314858770.iteye.com/blog/687978
 

最新文章

  1. V8 的 typeof null 返回 &quot;undefined&quot; 的 bug 是怎么回事
  2. 《Java程序性能优化》学习笔记 JVM和并发优化
  3. N!大整数阶乘问题
  4. pm2 开机自动运行
  5. c# 事件为何要继承EventArgs
  6. 关于Windows下mysql忘记root密码的解决方法
  7. 结构体中使用#define定义宏
  8. ubuntu 安装wxpython2.8
  9. object model 概述
  10. 【Flink】流-表概念
  11. dubbo扩展http协议后FullGC
  12. 【linux】启动apache遇到错误:httpd: Could not reliably determine the server&#39;s fully qualified domain name
  13. Visual C++ 6.0中if语句的常见问题
  14. Python基础理论 - 面向对象
  15. Number String(DP)
  16. 1.9 Android程序签名打包
  17. 高维数据的高速近期邻算法FLANN
  18. BZOJ5462 APIO2018新家(线段树+堆)
  19. .Net Core连接RabbitMQ集群
  20. SharePoint 列表权限控制

热门文章

  1. Android 实用工具Hierarchy Viewer实战
  2. bzoj 3517: 翻硬币
  3. css之选择器篇
  4. 转:XBMC源代码分析
  5. 斐波那契数列(Fibonacci)递归和非递归实现
  6. css3动画特效:纯css3制作win8加载动画特效
  7. [C] c99int(让VC等编译器自动兼容C99的整数类型)V1.02。源码托管到github、添加CMake编译配置文件、使用doxygen规范注释
  8. Understanding mysql max_connect_errors
  9. NuGet学习笔记(转)
  10. jsp:forward response.sendRedirect