TL; версия DR: используйте # coding: utf-8
или # encoding: utf-8
;они современны, и между ними нет никакой разницы.
Согласно этой самой поучительной статье В Ruby 1.9 правило состоит в том, что магический комментарий должен быть:
первая строка вашего кода - это комментарий, который включает в себя слово coding, затем двоеточие и пробел, а затем имя Encoding ...
Так, что охватывает 1, 2 &3 и, вероятно, будет включать такие вещи, как # foobarcoding: utf-8
.Это предпочтительный метод для Ruby 1.9.
По соображениям совместимости сохранены хэш-переключатели -K*
от Ruby 1.8, которые охватывают 4.
Числа пять и шесть охватывают немного другоевещь.Я рекомендую прочитать вышеупомянутую статью, чтобы увидеть, как именно работают внешние и внутренние кодировки.Однако суть в том, что когда вы читаете данные через объект ввода-вывода, важно, как эти данные кодируются для правильного чтения.Внешняя кодировка выражает только это.Поэтому, когда вы устанавливаете внешнюю кодировку в UTF-8, вы подразумеваете, что файл, который вы читаете, кодируется в UTF-8.Внутренняя кодировка состоит в том, в какую кодировку Ruby должен автоматически перекодировать результирующую строку из этой операции.
Значение по умолчанию, которое вы устанавливаете, используется, когда внешняя кодировка не установлена явно.Эти значения по умолчанию можно изменить с помощью флага -E
в хэше (номер 5; таким образом, 5 и 6 будут работать одинаково).
Передача -U
установит внутреннюю кодировку в UTF-8 (это означает, что строки будут автоматически перекодированы в UTF-8 при чтении).