Каковы различия между способами определения кодировки символов? - PullRequest
3 голосов
/ 12 декабря 2011

Я видел несколько способов задания кодировки строки следующим образом:

  1. # -*- coding: utf-8 -*-
  2. # coding: utf-8
  3. # encoding: utf-8
  4. #!/usr/bin/env ruby -Ku
  5. #!/usr/bin/env ruby -Eutf-8
  6. Encoding.default_external = "utf-8"

Есть еще что-нибудь? Может кто-нибудь сказать мне их разницу, если таковые имеются, и их происхождение, если таковые имеются? Есть ли старые и новые? второстепенные и популярные; обесценились и оценены?

Ответы [ 2 ]

4 голосов
/ 12 декабря 2011

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 при чтении).

1 голос
/ 12 декабря 2011

2-й и 3-й в основном одинаковы, где вы указываете кодировку для каждого файла отдельно. Вам нужно только «кодирование», но поскольку «кодирование» содержит слово «кодирование», это тоже работает. Я не могу вспомнить других, но прохождение Питера Купера по Ruby 1.9 выходит за рамки некоторых отличий.

...