Задать вопрос
@Mox
Team Lead, RoR, React/React Native

Кодировка сериализуемых аттрибутов в Rails/Ruby 1.9.3?

На хабре многие уже пишут, что полностью отказались от Ruby 1.8.7 и перешли на 1.9.x ветку.



Я решил попробовать перевести Rails 3.1 проекты на 1.9.3



— Я добавил с помощью специального gem во все *.rb коммент с кодировкой

— Прописал



Encoding.default_external = Encoding::UTF_8<br/>
Encoding.default_internal = Encoding::UTF_8<br/>




Тем не менее, я все равно получаю злополучный incompatible character encodings: UTF-8 and ASCII-8BIT

Я подозреваю, что глюк происходит в тех местах, где в коде описаны сериализуемые аттрибуты моделей

Что-то вроде

serialize :answers<br/>

Кодировка MySQL соединения установлена в UTF-8



Делающие проекты на ветке 1.9.x, как вы с этим разбирались?
  • Вопрос задан
  • 2964 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@Mox Автор вопроса
Team Lead, RoR, React/React Native
Дальнейшее расследование показало вот что

Есть текстовое поле в базе, куда Ruby 1.8.7 сериализовал данные. Вот его содержимое.

---
- !binary |
0J7QtNC40L0t0LTQstCw
итд


Похоже что десериализация этого в 1.9.x срабатывает некорректно.
Попробую отдельно в консоли прочитать, сделать force_encoding и сохранить.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
GearHead
@GearHead
Fullstack разработчик и предприниматель
1) magick comment надо добавлять только в те файлы, в которых есть явные нелатинские символы. переходите на I18n и не пишите русские комменты, и можно забыть об этом комменте.
2) из пары моих рельсовых проектов на 1.9.3:
$ grep -iR 'Encoding.default_internal' *
$

зачем это вообще?
3) если где-то в коде явно и встречается упоминание utf-8, то только в config/application.rb:
config.encoding = "utf-8"
4) проверьте хорошенько, что ваши view-template'ы все на utf-8, и что формы содержат magick utf-8 attribute. вероятно, вам с клиента приходят данные в однобайтовой кодировке.
5) пользуйтесь дебаггером. локализуйте место ошибки. хотя бы трейс здесь приведите.

больше ничего не могу сказать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы