Как работает магический комментарий (# Encoding: utf-8) в ruby? - PullRequest
35 голосов
/ 16 января 2012

Как работает магический комментарий в ruby?Я говорю о:

# Encoding: utf-8

Это директива предварительной обработки?Есть ли другие варианты использования этого типа конструкции?

Ответы [ 3 ]

58 голосов
/ 16 января 2012

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

Вы можете указать кодировку несколькими способами (некоторые из них распознаются редакторами):

# encoding: UTF-8
# coding: UTF-8
# -*- coding: UTF-8 -*-

Вы можете прочитать некоторые интересные материалы о кодировке исходного кода в этой статье .

Единственное, что мне известно о подобной конструкции, это shebang , но оно относится к оболочкам Unix в целом и не относится к Ruby.

14 голосов
/ 16 января 2012

Этот волшебный комментарий сообщает Ruby исходную кодировку текущего проанализированного файла.Так как Ruby 1.9.x по умолчанию предполагает US_ASCII, вы должны указать интерпретатору, в какой кодировке находится ваш исходный код, если вы используете не-ASCII символы (например, умляуты или акцентированные символы).

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

Существуют другие настройки кодирования.См. этот вопрос для получения дополнительной информации.

Начиная с версии 2.0, Ruby по умолчанию предполагает кодировку UTF-8 исходного файла.Таким образом, этот волшебный комментарий о кодировке стал более редким явлением, если вы все равно пишете свой исходный код в UTF-8.

7 голосов
/ 30 мая 2016

Как вы заметили, магические комментарии - это специальная конструкция предварительной обработки. Они должны быть определены вверху файла (за исключением случаев, когда уже есть unix shebang вверху). В Ruby 2.3 есть три вида магических комментариев:

  • Кодировка комментария: см. Другие ответы. Всегда должен быть первым волшебным комментарием. Должен быть ASCII-совместимым. Устанавливает исходную кодировку, поэтому вы столкнетесь с проблемами, если реальная кодировка файла не соответствует указанной кодировке
  • frozen_string_literal: true: замораживает все строковые литералы в текущем файле
  • warn_indent: true: активирует предупреждения об отступах для текущего файла

Дополнительная информация: Магические инструкции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...