В Ruby 1.9 кодировка теперь явная.Однако Rails может или не может быть настроен на отправку ответов в ожидаемой вами кодировке.Вам нужно установить глобальную настройку конфигурации:
Encoding.default_external = "utf-8".
Я считаю, что кодировка, которую Ruby определяет по умолчанию для сериализации, - это платформа по умолчанию.В Америке на Windows это будет CodePage-1251.Другие страны будут иметь альтернативную кодировку.
Редактировать : также смотрите этот URL, если JSON выполняется для MySQL: https://rails.lighthouseapp.com/projects/8994/tickets/5210-encoding-problem-in-json-format-response
Редактировать2 : ядро Rails и его набор библиотек (ActiveRecord и др.) Будут учитывать параметр конфигурации Encoding.default_external, который кодирует все отправляемые им значения.К сожалению, поскольку кодирование является относительно новой концепцией для Ruby, не каждая сторонняя библиотека была настроена для правильного кодирования.Те, которые имеют, могут потребовать дополнительных настроек конфигурации для этих библиотек.Это включает в себя MySQL и библиотеку RSolr, которую вы использовали.
Во всех версиях Ruby до серии 1.9 строка представляла собой просто массив байтов.Когда вы так долго думали, трудно обдумать концепцию кодирования нескольких строк.Еще более запутанным является то, что в отличие от Java, C # и других языков, которые используют некоторую форму UTF в качестве собственного формата строки, Ruby позволяет по-разному кодировать каждую строку.Оглядываясь назад, это может быть ошибкой, но, по крайней мере, теперь они соблюдают кодировку.
Метод Encoding.force_encoding
предназначен для обработки последовательности байтов с помощью этой новой кодировки, но не изменяет какие-либо базовые данные.,Таким образом, возможно иметь недопустимые последовательности байтов.Существует еще один метод, называемый .encode()
, который преобразует байты из одной кодировки в другую и гарантирует действительные последовательности байтов.Для получения дополнительной информации читайте это:
http://blog.grayproductions.net/articles/ruby_19s_string