Я в процессе обновления старого устаревшего приложения Rails 2.3 к чему-то более современному и запущенному в проблему с кодировкой. Я прочитал все существующие ответы, которые я могу найти по этой проблеме, но у меня все еще возникают проблемы.Ошибка кодирования с Rails 2.3 на Ruby 1.9.3
Rails вер: 2.3.17 Рубиновые версии: 1.9.3p385
Мои таблицы MySQL являются по умолчанию набор символов: utf8
, сверка: utf8_general_ci
. До 1.9 я использовал оригинальный камень mysql
без инцидентов. После обновления до 1.9, когда он получен ничего с utf8 символов в ней бы получить это хорошо документированный проблема:
ActionView::TemplateError (incompatible character encodings: ASCII-8BIT and UTF-8)
Я переключился на mysql2
драгоценный камень для его превосходной управляемостью, и я больше не вижу исключения, но вещи, безусловно, не кодирующие правильно. Например, то, что появляется в БД как строка Repoussé
визуализируется с помощью Rails, как Repoussé
, “Boat”
выглядит как “Boatâ€
и т.д.
Несколько больше деталей:
- Я вижу те же результаты, когда я использую Драйвер
ruby-mysql
как водитель. - Я добавил
encoding: utf8
строки в каждой записи в моемdatabase.yml
Я также добавил следующее мое environment.rb
:
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8
Она пришла мне в голову, что я, возможно, некоторое несоответствие где latin1 записывается старой версией приложения в поля utf8 базы данных или что-то в этом роде, но все символы отображаются правильно, если смотреть в клиенте командной строки mysql
.
Заранее благодарим за любые советы, высоко ценим!
ОБНОВЛЕНИЕ: Теперь я считаю, что проблема заключается в том, что мои данные utf8 принудительно выполняются через двоичное преобразование в latin1 по пути из db, я просто не уверен, где.
mysql> SELECT CONVERT(CONVERT(name USING BINARY) USING latin1) AS latin1, CONVERT(CONVERT(name USING BINARY) USING utf8) AS utf8 FROM items WHERE id=myid;
+-------------+----------+
| latin1 | utf8 |
+-------------+----------+
| Repoussé | Repoussé |
+-------------+----------+
У меня есть encoding
набор для utf8
в database.yml, любые другие идеи, где это может быть из?
Просто из любопытства, чем ваша HTML страница кодирования? Является ли оно явно задано 'utf-8'? – mudasobwa
Хорошо, да это: '' –
Чтобы найти источник проблемы более точно, я бы предложил вам ' Logger.debug' ваши данные из вашего шаблона, модели, везде. Полагаю, это не драйвер 'mysql', искажающий ваши данные. – mudasobwa