несовместимые кодировки символов: ASCII-8BIT и UTF-8 в Ruby 1.9
Я получаю следующую ошибку с моим Ruby 1.9 & Rails 2.3.4. Это происходит, когда пользователь отправляет не-ASCII стандартный символ.
Я прочитал много интернет-ресурсов, но ни один из них, кажется, не имеет решения, которое работало.
Я попробовал использовать (как предлагали некоторые ресурсы)
string.force_encoding('utf-8')
Но это не помогло.
Есть идеи, как это решить? Есть ли способ исключить такие символы перед сохранением в БД? Или есть способ заставить их показать себя?
2 ответов:
Я мало что знаю о Ruby (или Rails), но полагаю, что проблема вызвана отсутствием контроля над кодировками символов.
Во-первых, вы должны решить, какую кодировку вы храните в своей базе данных. Затем вам нужно убедиться, что вы преобразовали весь текст в эту кодировку перед сохранением в базе данных. Для того, чтобы сделать это, вам сначала нужно знать, с какой кодировки это начать.
Один часто повторяемый совет-декодировать все входные данные из любой кодировки, которую он использует., в unicode (если ваш язык поддерживает его) как можно скорее после того, как вы получите контроль над ним. Тогда вы знаете, что весь текст, который вы обрабатываете в своей программе, является unicode. С другой стороны, кодируйте текст в любую выходную кодировку, которую вы хотите, в качестве последнего шага перед его выводом.
Ключ всегда должен знать, какую кодировку использует фрагмент текста в любом заданном месте кода.
Для ruby 1.9 и Rails 3.0.x, Используйте адаптер mysql2.
В вашем gemfile:
gem 'mysql2', '~> 0.2.7'И обновите свою базу данных.yml to:
adapter: mysql2
Comments