Ruby on Rails - Исправления заполняют базу данных sqlite3 с неправильной кодировкой utf-8
Заполнение базы данных sqlite3 с помощью Fixtures работало с config1, но с config2 поддержка utf-8 не удалась.
config1: Ubuntu 11.04, ruby 1.9.2p136, Rails 3.0.3, среда разработки
config2: OS X Lion, ruby 1.9.2p290, Rails 3.0.3, среда разработки
При наличии файла yml, например
001:
id: 1
name: "\xC3\xBC"
Я использую его для заполнения базы данных
Fixtures.create_fixtures(...)
в seed.rb
После этого в базу данных кричат запись с идентификатором 1 и именем "ü". Это было бы правильно. Это работало с config1. С config2 у меня всегда есть запись с именем "¼¼". Кажется, что кодировка utf-8 не работает.
Я уже включил UTF-8 везде в проекте рельсов:
encoding: utf-8
в database.yml
# encoding: utf-8
в seed.rb
Encoding.default_external = "UTF-8"
Encoding.default_internal = "UTF-8"
config.encoding = "utf-8"
в config/ средах /development.rb
1 ответ
Возможно ли, что эти две системы имеют разные порядки байтов?
Из заметок о выпуске SQLite3:
Поддержка UTF-8 и UTF-16
Новый API для SQLite 3.0 содержит подпрограммы, которые принимают текст как UTF-8 и UTF-16 в собственном порядке байтов хоста. Каждый файл базы данных управляет текстом как UTF-8, UTF-16BE (с прямым порядком байтов) или UTF-16LE (с прямым порядком байтов).
Вы можете проверить здесь: http://en.wikipedia.org/wiki/Endianness