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



Я получаю следующую ошибку с моим Ruby 1.9 & Rails 2.3.4. Это происходит, когда пользователь отправляет не-ASCII стандартный символ.



Я прочитал много интернет-ресурсов, но ни один из них, кажется, не имеет решения, которое работало.



Я попробовал использовать (как предлагали некоторые ресурсы)



string.force_encoding('utf-8') 


Но это не помогло.



Есть идеи, как это решить? Есть ли способ исключить такие символы перед сохранением в БД? Или есть способ заставить их показать себя?

597   2  

2 ответов:

Я мало что знаю о Ruby (или Rails), но полагаю, что проблема вызвана отсутствием контроля над кодировками символов.

Во-первых, вы должны решить, какую кодировку вы храните в своей базе данных. Затем вам нужно убедиться, что вы преобразовали весь текст в эту кодировку перед сохранением в базе данных. Для того, чтобы сделать это, вам сначала нужно знать, с какой кодировки это начать.

Один часто повторяемый совет-декодировать все входные данные из любой кодировки, которую он использует., в unicode (если ваш язык поддерживает его) как можно скорее после того, как вы получите контроль над ним. Тогда вы знаете, что весь текст, который вы обрабатываете в своей программе, является unicode. С другой стороны, кодируйте текст в любую выходную кодировку, которую вы хотите, в качестве последнего шага перед его выводом.

Ключ всегда должен знать, какую кодировку использует фрагмент текста в любом заданном месте кода.

Для ruby 1.9 и Rails 3.0.x, Используйте адаптер mysql2.

В вашем gemfile:

gem 'mysql2', '~> 0.2.7'

И обновите свою базу данных.yml to:

adapter: mysql2

Http://www.rorra.com.ar/2010/07/30/rails-3-mysql-and-utf-8/

Comments

    Ничего не найдено.