zoukankan      html  css  js  c++  java
  • ruby -- 问题解决(三)编码错误导致无法显示(1)

    从数据库中取得数据显示时报 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
     
  • 相关阅读:
    P3133 [USACO16JAN]无线电联系Radio Contact
    P2196 挖地雷
    P2434 [SDOI2005]区间
    P2820 局域网
    P2904 [USACO08MAR]跨河River Crossing
    P1586 四方定理
    P2983 [USACO10FEB]购买巧克力Chocolate Buying
    P2049 魔术棋子
    kali-linux破解密码运行脚本并隐藏进程
    kali安装使用
  • 原文地址:https://www.cnblogs.com/lmei/p/3205504.html
Copyright © 2011-2022 走看看