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

Другие вопросы по тегам