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(...)

в семени.рб

После этого в базе данных появится запись с идентификатором 1 и именем «ü». Это было бы правильно. Это работало с config1. С config2 у меня всегда есть запись с именем «Ã¼». Кодировка utf-8 не работает.

Я уже включил UTF-8 везде в проекте rails:

encoding: utf-8

в базе данных.yml

# encoding: utf-8

в семенах.рб

Encoding.default_external = "UTF-8"
Encoding.default_internal = "UTF-8"
config.encoding = "utf-8"

в config/environments/development.rb


person stackutz    schedule 27.07.2011    source источник


Ответы (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#Endianness_and_operating_systems_on_architectures

person jordanpg    schedule 17.05.2012