Установите UTF-8 по умолчанию для Ruby 1.9.3
Я на Rails 4 и Ruby 1.9.3
Я часто использую "странные" символы, поэтому мне нужно объявить кодировку UTF-8 в верхней части всех файлов .rb.
Есть ли способ установить UTF-8 в качестве кодировки по умолчанию для Ruby 1.9.3?
Я пробовал все ответы, но при запуске rake db:seed
и создании объекта, чьи атрибуты содержат не US-ASCII
допустимые символы, я все равно получаю эту ошибку:
`block in trace_on': invalid byte sequence in US-ASCII (ArgumentError)
Ответы
Ответ 1
Чтобы изменить исходную кодировку (например, в кодировке вашего исходного исходного кода), в настоящий момент вы должны использовать магический комментарий:
# encoding: utf-8
Недостаточно либо задать внутреннюю кодировку (кодировку внутреннего строкового представления после преобразования), либо внешнее кодирование (предполагаемое кодирование файлов чтения). Фактически вам нужно установить комментарий к кодировке магии поверх файлов, чтобы установить исходную кодировку.
В ChiliProject у нас есть задача rake, которая автоматически устанавливает правильный заголовок кодировки во все файлы перед выпуском.
Что касается кодировки по умолчанию:
- Ruby 1.8 и ниже вообще не знали понятия строковых кодировок. Строки были более или менее байтовыми массивами.
- Ruby 1.9: кодировка строки по умолчанию
US_ASCII
.
- Ruby 2.0 и выше: кодировка по умолчанию -
UTF-8
.
Таким образом, если вы используете Ruby 2.0, вы можете пропустить комментарий для кодировки и корректно предполагать кодировку UTF-8 всюду по умолчанию.
Ответ 2
в Ruby 1.9 по умолчанию используется ASCII
в Ruby 2.0 по умолчанию используется UTF-8.
изменить версию Ruby
или
config.encoding = "utf-8" # application.rb
и
в database.yml
development:
adapter: your_db
host: localhost
encoding: utf8
Ответ 3
Я думаю, вам нужно одно из следующего, в зависимости от контекста.
Encoding.default_internal = Encoding::UTF_8
Encoding.default_external = Encoding::UTF_8
Этот параметр создается в файле environment.rb.
Ответ 4
В приложении .rb
# Configure the default encoding used in templates for Ruby
config.encoding = "utf-8"
Это не вся история, как указал Хольгер, посмотрите question для дальнейшего объяснения.