Ruby on Rails 3, несовместимые кодировки символов: UTF-8 и ASCII-8BIT с i18n - PullRequest
34 голосов
/ 15 ноября 2010

У меня проблемы с парой Rails 3.0.1, Ruby 1.9.2 и локализацией моего сайта.

Проблема довольно проста, у меня есть что-то вроде этого:

f.input :zip_code, :label => I18n.t('labels.zip_code')

и файл es.yml:

es:
  labels:
    zip_code: "Este código postal no es valido."

Нет проблем с файлом en.yml (это чистый ASCII), но когда для сайта установлено значение i18n.locale == 'es', я получаю эту ошибку:

incompatible character encodings: UTF-8 and ASCII-8BIT

Я довольно долго осматривался, но не нашел способа использовать мои файлы перевода UTF-8.

Кто-нибудь знает, как заставить это работать?

Спасибо за вашу помощь.

Ответы [ 5 ]

47 голосов
/ 07 марта 2011

Хорошо, проблема решена после нескольких часов поиска в Google ...

На самом деле в моем коде было две ошибки.Первый - ошибка кодирования файла, а второй - проблема конфигурации базы данных MySQL.

Во-первых, чтобы решить ошибку, вызванную MySQL, я использовал эти две статьи:

http://www.dotkam.com/2008/09/14/configure-rails-and-mysql-to-support-utf-8/

http://www.rorra.com.ar/2010/07/30/rails-3-mysql-and-utf-8/

Во-вторых, чтобы решитьпроблема с кодировкой файла Я добавил эти 2 строки в мою config / environment.rb

Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8

Надеюсь, это кому-нибудь поможет:)

23 голосов
/ 02 августа 2011

Я решил большинство проблем, объединив множество решений:

  • Убедитесь, что application.rb имеет эту строку: config.encoding = "utf-8".
  • Убедитесь, что вы используете 'mysql2' gem
  • Помещение # encoding: utf-8 в начало любого файла, содержащего символы utf-8.
  • Добавьте следующие две строки над строкой <App Name>::Application.initialize! в environment.rb:

    Encoding.default_external = Encoding::UTF_8
    Encoding.default_internal = Encoding::UTF_8
    

http://rorguide.blogspot.com/2011/06/incompatible-character-encodings-ascii.html

0 голосов
/ 09 апреля 2012

Использование этой функции распаковки помогло мне окончательно разобраться с этим, попробуйте это, если вы получите сообщение об ошибке «невозможно преобразовать»:

myString.unpack('U*').pack('U*')
0 голосов
/ 25 ноября 2010

Вы уверены, что ваш es.yml файл был сохранен как UTF-8?

Если вы работаете в Windows, используйте http://notepad -plus-plus.org / , чтобы сделатьточно.

0 голосов
/ 16 ноября 2010

Убедитесь, что в вашем config/application.rb есть config.encoding = "utf-8". Кроме того, ваш пример файла перевода не соответствует ключу, который вы ищете (com_name и first_name), но я предполагаю, что это может быть просто опечатка.

...