Rails4.0--エンコーディングエラーにより表示できない(一)

4600 ワード

Rails4.0--エンコーディングエラー(一)
データベースから取得したデータ表示時報incompatible character encodings:GBK and ASCII-8 BITまたはincompatible character encodings:UTF-8 and ASCII-8 BITのエラー
具体的には、データベースの中の中国語は文字化けしていないので、取り出してページに時報符号化エラーを表示します.
データベースから取り出したばかりの頃は文字列がASCII-8 BITだったので、database.ymlでencoding:utf-8を設定しましたが無効です.
データテーブルCustomers(id,name,phone)が知られています
テーブル内のnameは、データベース内のデータが中国語であり、データベース内の中国語が文字化けしていないUTF-8に設定されています.
しかし、データベースから読み込まれた場合、エンコードエラー!
 @_@?!
 
解決策はmodelsフォルダにcustomerを見つけることです.rbファイル(注:ruby 1.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