Подтвердить что ты не робот

Как я могу избежать помещать комментарий к кодировке магии поверх каждого файла 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, которая автоматически добавляет директиву кодирования, если это необходимо.

4b9b3361

Ответ 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?