несовместимые кодировки символов: UTF-8 и ASCII-8BIT и Thinking_sphinx

У меня очень распространенная проблема в ruby ​​1.9.2 и rails 3.0.9 — несовместимые кодировки символов: исключение UTF-8 и ASCII-8BIT. Он возникает, когда я использую поиск Think_sphinx.

def result
  #return page(1).per(1) #no any exceptions
  return search('').page(1).per(1) #if I use this an exception is raised when i try to render partial
end

Затем результат этого метода используется в частичном

render Trademarks.result

Я использую и erb, и haml (визажист использует html, а я предпочитаю использовать haml), но это разрешено ссылкой на haml.

Я пробовал магические комментарии, default_internal, external и некоторые другие советы, но безрезультатно. Любые идеи?


person Alexander Ulitin    schedule 31.07.2011    source источник
comment
Исключение возникает только тогда, когда я использую trade.excerpts.something. Кажется, вот в чем причина проблемы. Может быть, выдержки добавляют несовместимые символы при выделении найденных слов? Я создал задачу здесь github.com/freelancing-god/thinking-sphinx /вопросы/262   -  person Alexander Ulitin    schedule 01.08.2011


Ответы (2)


Хорошо, решение состоит в том, чтобы использовать model_name.excerpts.something с force_encoding('utf-8'), потому что это не возвращает строку UTF.

person Alexander Ulitin    schedule 01.08.2011
comment
Также это исправлено в gem 'riddle', :git => 'git://github.com/freelancing-god/riddle.git' и будет исправлено в следующем выпуске TS. - person Alexander Ulitin; 02.08.2011

Возникает ли исключение, если вы возвращаете результаты через стандартный запрос ActiveRecord?

Если в вашей базе данных есть недопустимый код utf-8, кодировка строковых атрибутов вашей модели может конфликтовать с кодировкой вашего представления.

person James Healy    schedule 01.08.2011
comment
Как я уже говорил, проблем с AR-запросами у меня нет. Trademark.page(1).per(1).to_sql - это SELECT trademarks.* FROM trademarks LIMIT 1 OFFSET 0. БД находится в utf-unicode-ci - person Alexander Ulitin; 01.08.2011