Как я могу избежать помещать комментарий к кодировке магии поверх каждого файла UTF-8 в Ruby 1.9?
У меня есть проект Rails с большим количеством кириллических строк.
Он отлично работал на Ruby 1.8, но Ruby 1.9 предполагает, что исходные файлы кодируются US-ASCII, если вы не предоставите комментарий # encoding: utf-8
в верхней части исходного файла. В этот момент файлы не считаются US-ASCII
.
Есть ли более простой способ сказать Ruby? Это приложение кодируется UTF8. Учитывайте все и любые исходные файлы как UTF8, если не указано иначе??
ОБНОВЛЕНИЕ:
Я написал " Как вставить кодировку: директива UTF-8 автоматически в файлах Ruby 1.9, которая автоматически добавляет директиву кодирования, если это необходимо.
Ответы
Ответ 1
Явный лучше, чем неявный. Записывание имени кодировки полезно для вашего текстового редактора, вашего переводчика и любого другого, кто хочет посмотреть на файл. Различные платформы имеют разные значения по умолчанию - UTF-8, Windows-1252, Windows-1251 и т.д. - и вы будете либо препятствовать переносимости, либо интеграции платформы, если вы автоматически выбираете один из них. Требование более явных кодировок - это хорошая вещь.
Может быть хорошей идеей интегрировать ваше приложение Rails с GetText. Затем все ваши строки UTF-8 будут изолированы от небольшого количества файлов перевода, а ваши модули Ruby будут чистыми ASCII.
Ответ 2
Я думаю, вы можете либо
- используйте
-E utf-8
аргумент командной строки для ruby
или
- установите переменную среды
RUBYOPT
в "-E utf-8"
Ответ 3
По-моему, явный не всегда лучше, чем неявный.
Когда почти весь источник, который вы используете, совместим с UTF-8, вы можете легко исключить комментарий магического кодирования с помощью параметров командной строки Ruby -Ku
.
Не путайте параметр < u
<-K
с параметрами -U
.
-Ku : set internal and script encoding to utf-8
-U : set internal encoding to utf-8
Затем задайте комментарий магического кодирования только в необходимых ему сценариях. Помните, соглашение по конфигурации!
Вы можете установить переменную окружения RUBYOPT=-Ku
См. параметры командной строки Ruby в http://www.manpagez.com/man/1/ruby/.
Ответ 4
Есть жемчужина, которая устанавливает волшебный комментарий сверху на каждый файл, который нуждается в нем в проекте Rails: https://github.com/m-ryan/magic_encoding
Вы просто установите его и запустите magic_encoding
в корне вашего проекта, проблема решена.
Ответ 5
Не прямой ответ, но в зависимости от вашей среды кодирования вы можете позволить редактору позаботиться о вещах. Например, Emacs ruby-mode
имеет переменную ruby-insert-encoding-magic-comment
:
ruby-insert-encoding-magic-comment переменная, определенная в `ruby-mode.el ' Его значение равно t
Документация: * Вставьте комментарий "кодирование" магического emacs при сохранении, если это не ноль.
Вы можете настроить эту переменную.
Я уверен, что есть что-то подобное для других редакторов. Конечно, это все равно означает добавление волшебного комментария к каждому файлу, но, по крайней мере, редактор делает это за вас автоматически, вместо того, чтобы вы помнили.
Ответ 6
Единственный надежный (и DRY!) способ гарантировать, что все ваши файлы (источник и активы) загружены с вашей предпочтительной кодировкой во время выполнения, это использовать аргумент командной строки -E.
Все другие подходы имеют недостатки в зависимости от вашей системы (например, невозможно установить значения ENV vars, загруженный сторонний код, из-за чего первый не подходит для использования Encoding.default_external
,...).
Мои серверы используют следующую оболочку script:
#!/bin/bash
exec /usr/local/rvm/rubies/default/bin/ruby -E utf-8:utf-8 "[email protected]"
(обязательно настройте путь)
Ответ 7
Я не сталкиваюсь с этим много, но когда мне нужно обеспечить UTF-8, я использую глобальный $KCODE. Попробуйте поместить это в свою среду. Rb: $KCODE = 'UTF8'
Также вы уверены, что ваш редактор сохраняет файлы в UTF-8?