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()なし)
元のコードは次のとおりです.
でget_nameメソッドは、データベースから読み出されたnameフィールドの値をトランスコードします.
customerを変更します.rb、コードは以下の通りです.
注意:トランスコードのメソッド名は、トランスコードを行う属性名の前に「get_」を付けます.例えば、nameをトランスコードするには、get_というメソッドがあります.name
次に、viewsフォルダの下にあるcustomersのindexのような読み出しデータを表示するインタフェースのコードを変更する.html.erb
元のコードは次のとおりです.
修正されたコードは次のとおりです.
参照リンク:
http://314858770.iteye.com/blog/687978
データベースから取得したデータ表示時報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