Rails 3.2.13 애플리케이션을 Ruby 1.8.7-p370에서 Ruby 1.9.3-p385로 업그레이드하고 있습니다. 업그레이드 후 데이터베이스에서 검색 한 텍스트에 특수 문자가 왜곡됩니다. 예를 들어 "café"는 "café"로 나타납니다. 내 데이터베이스는 latin1로 인코딩되어 있습니다. 나는이 같은 mysql2 (0.3.11) 내 database.yml
외모를 사용하고 있습니다 : Ruby 1.8.7에서 1.9.3으로 Rails 3 앱을 업그레이드하면 database.yml의 latin1 인코딩 스펙이 적용되지 않습니다.
development:
adapter: mysql2
encoding: latin1
database: my_db
username: root
host: localhost
이 (같은 문제는 동일한 데이터베이스의 설정을 가지고 생산 환경에서 일어나고있다.)
그것은 나타납니다 ActiveRecord가 데이터베이스에서 텍스트를 가져올 때, 지정된대로 latin1 (또는 ISO-8859-1)이 아닌 utf-8 인 것처럼 그것을 디코딩합니다.
문제를 진단하기 위해, 나는 그 액티브 우회 데이터베이스를 직접 조회 할 수 mysql2를 사용하는 루비 스크립트를 작성 : 아이디 12934와 제조법은 제목에서 단어 "카페"가require 'rubygems'
require 'mysql2'
client = Mysql2::Client.new(:host => "localhost",
:username => "root",
:database => "food52_development_production",
:encoding => "latin1")
result = client.query('SELECT title FROM recipes WHERE id = 12934')
puts result.first["title"]
. 1.9.3에서이 스크립트를 실행하면 올바르게 디코딩 된 텍스트 ("café")가 출력됩니다. :encoding
옵션을 "utf-8"
으로 변경하면 다시 깨진 텍스트 ("café")가 표시됩니다.
또한 ActiveRecord::ConnectionAdapters
에 중단 점을 배치하여 레일스가 Mysql2::Client
을 초기화하는 인코딩 구성을 확인했습니다. 예상대로 :encoding => "latin1"
이 전달됩니다.
아직 : 줄을 따라 가면, Rails는 텍스트를 utf-8로 디코드하기로 결정합니다. Rails가 내가 지정한 latin1 인코딩 설정을 존중하게하려면 어떻게해야합니까? 귀하의 도움에 미리 감사드립니다.
시스템 사양은 무엇입니까? – tylerdavis
@tylerdavis, 나는 OS X 10.8.2를 사용하고 있지만, 제작 과정에서 우분투와 동일한 문제가 발생합니다. – hoffm