@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, как вы с этим разбирались?
  • Вопрос задан
  • 2955 просмотров
Решения вопроса 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) пользуйтесь дебаггером. локализуйте место ошибки. хотя бы трейс здесь приведите.

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

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

Войти через центр авторизации
Похожие вопросы