Как я могу избежать размещения магического комментария кодировки поверх каждого файла UTF-8 в Ruby 1.9? - PullRequest
32 голосов
/ 20 июля 2010

У меня есть проект Rails с большим количеством кириллических строк.

Он отлично работал на Ruby 1.8, но Ruby 1.9 предполагает, что исходные файлы закодированы в US-ASCII, если вы не предоставите комментарий # encoding: utf-8 в верхней части исходного файла. В этот момент файлы не считаются US-ASCII.

Есть ли более простой способ сообщить Ruby: «Это приложение имеет кодировку UTF8. Пожалуйста, рассмотрите все и любые включенные исходные файлы как UTF8, если не указано иное»?


ОБНОВЛЕНИЕ:

Я написал " Как вставить директиву кодировки: UTF-8 автоматически в файлы Ruby 1.9 ", которая автоматически добавляет директиву кодировки, если это необходимо.

Ответы [ 7 ]

13 голосов
/ 20 июля 2010

Я думаю, вы можете либо

  1. использовать -E utf-8 аргумент командной строки для ruby, либо
  2. установить переменную среды RUBYOPT в "-E utf-8"
12 голосов
/ 20 января 2012

На мой взгляд, явное не всегда лучше, чем неявное.

Когда почти весь используемый вами источник совместим с 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 голосов
/ 17 июня 2011

Существует драгоценный камень, который устанавливает волшебный комментарий сверху на каждый файл, который нуждается в нем в проекте Rails: https://github.com/m-ryan/magic_encoding

Вы просто устанавливаете его и запускаете magic_encoding в корне вашего проекта, проблема решена.

4 голосов
/ 20 июля 2010

Явное лучше, чем неявное. Написание названия кодировки хорошо для вашего текстового редактора, вашего переводчика и всех, кто хочет посмотреть файл. Разные платформы имеют разные значения по умолчанию - UTF-8, Windows-1252, Windows-1251 и т. Д. - и вы либо затрудните переносимость, либо интеграцию с платформой, если вы автоматически выберете одну поверх другой. Требовать более явных кодировок - это хорошо.

Это может быть хорошей идеей для интеграции вашего Rails-приложения с GetText. Тогда все ваши строки UTF-8 будут изолированы с небольшим количеством файлов перевода, а ваши модули Ruby будут чистыми ASCII.

3 голосов
/ 18 мая 2011

Не прямой ответ, но в зависимости от среды программирования вы можете позволить редактору позаботиться обо всем. Например, Emacs 'ruby-mode имеет переменную ruby-insert-encoding-magic-comment:

ruby-insert-encoding-magic-comment is переменная, определенная в `ruby-mode.el ' Его значение t

Документация: * Вставьте магический комментарий emacs 'coding' после сохранения, если это не ноль.

Вы можете настроить эту переменную.

Я уверен, что есть что-то похожее для других редакторов. Конечно, это по-прежнему означает добавление волшебного комментария к каждому файлу, но, по крайней мере, редактор делает это автоматически, вместо того, чтобы вы помнили.

1 голос
/ 18 мая 2011

Единственный надежный (и СУХОЙ!) 1.9 способ гарантировать, что все ваши файлы (исходные файлы и ресурсы) загружаются с вашей предпочтительной кодировкой во время выполнения, - это использовать аргумент командной строки -E.

Все другие подходы имеют недостатки в зависимости от вашей системы (например, невозможно установить ENV-переменные, сначала загружается сторонний код, что делает невозможным использование Encoding.default_external, ...).

Мои производственные серверы используют следующий скрипт-оболочку:

#!/bin/bash
exec /usr/local/rvm/rubies/default/bin/ruby -E utf-8:utf-8 "$@"

(не забудьте адаптировать путь)

0 голосов
/ 20 июля 2010

Я не особо сталкиваюсь с этим, но когда мне нужно обеспечить UTF-8, я использую глобальную переменную $ KCODE.Попробуйте добавить это в свою среду. Rb: $KCODE = 'UTF8'

Кроме того, вы уверены, что ваш редактор сохраняет файлы в формате UTF-8?

...