В Ruby 1.9 все исходные файлы должны быть в кодировке UTF-8.(Даже если необходима перекомпиляция интерпретатора) - PullRequest
15 голосов
/ 19 марта 2011

Я хочу портировать приложение rails с Ruby 1.8.7 на 1.9.2.Некоторые файлы содержат умлауты, такие как ä / ö / ü, как в строках, так и в комментариях.Файлы были сохранены как UTF-8, но без BOM (метка порядка байтов) в начале.

Как вы, возможно, знаете, 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, но, похоже, это игнорируется при вызовеграбли (я пытался: /home/malte/.rvm/gems/ruby-1.9.2-p180/bin/rake test).

Поэтому мой вопрос:

Как строится RVMruby 1.9 в любом случае из источника, есть опция сборки или патч для изменения кодировки по умолчанию с US-ASCII на UTF-8 ?

Я быстро взглянул на исходный код, ноне удалось найти строку, где установлено значение по умолчанию (я не эксперт по Си, круто).

1 Ответ

30 голосов
/ 19 марта 2011

Я нашел обходной путь: установить переменную окружения RUBYOPT , например, выполнив

export RUBYOPT=-Ku

в вашей оболочке.

Это установит опцию -Ku als по умолчанию при вызове ruby.Теперь вы можете вызывать все другие инструменты, которые вызывают ruby, не беспокоясь о параметрах.rails server или rake работает и рассматривает все файлы как UTF-8.Никакой спецификации или волшебных комментариев не требуется!

...