Сделайте Ruby 1.9, чтобы все исходные файлы были закодированы в кодировке UTF-8. (Даже если требуется перекомпиляция переводчика)
Я хочу перенести приложение rails с Ruby 1.8.7 на 1.9.2. Некоторые из файлов содержат umlauts, например ä/ö/ü, как в строках, так и в комментариях.
Файлы были сохранены как UTF-8, но без спецификация (символ байтового байта) в начале.
Как вы, возможно, знаете, Ruby 1.9 отказывается разбирать эти файлы, предоставляя invalid multibyte char (US-ASCII)
Я много гулял и читал, но единственным решением для этого, похоже, было
- вставить спецификацию или
- Вставить
# coding: utf-8
в начале каждого файла.
Мой редактор выбора (gEdit), похоже, не вставляет спецификацию. Я также читал, что наличие спецификации - это плохая практика, потому что она может сломать некоторые редакторы, она также нарушает сценарии оболочки, если вы хотите использовать нотацию shebang.
EDIT: спецификация разбивает анализатор Ruby 1.8.7, предоставляя syntax error, unexpected kEND, expecting $end (SyntaxError)
для файла!
Я попробовал принудительное внешнее кодирование с ruby -Eutf-8: utf-8, но это, похоже, игнорируется при вызове rake (я пробовал:/home/malte/.rvm/gems/ruby-1.9.2-p180/бит/рейк).
Итак, мой вопрос:
Поскольку RVM все равно строит ruby 1.9 из исходного кода, существует опция сборки или патч для изменения кодировки по умолчанию от US-ASCII до UTF-8?
Я быстро просмотрел исходный код, но не смог найти строку, в которой установлен по умолчанию (я не эксперт C, жесткий).
Ответы
Ответ 1
Я нашел обходное решение:
установить переменную среды RUBYOPT
, например, выполнив
export RUBYOPT=-Ku
в вашей оболочке.
При вызове ruby будет установлен параметр -Ku als по умолчанию. Теперь вы можете вызывать все другие инструменты, которые вызывают рубины, не беспокоясь о параметрах. rails server
или rake
работает и рассматривает все файлы как UTF-8. Никаких спецификаций или магических комментариев не требуется!