Правильный способ определения кодировки исходного кода Python

PEP 263 определяет, как определить кодировку исходного кода Python.

Обычно первые две строки файла Python должны начинаться с:

#!/usr/bin/python
# -*- coding: <encoding name> -*-

Но я видел много файлов, начиная с:

#!/usr/bin/python
# -*- encoding: <encoding name> -*-

- > кодировка вместо кодирования.

Итак, каков правильный способ объявления кодировки файла?

Разрешено ли кодирование, потому что используемое регулярное выражение является ленивым? Или это просто еще одна форма объявления кодировки файлов?

Я задаю этот вопрос, потому что PEP не говорит о кодировке, он просто говорит о кодировании.

Ответ 1

Проверьте документы здесь:

"Если комментарий в первой или второй строке Python script соответствует регулярному выражению coding[=:]\s*([-\w.]+), этот комментарий обрабатывается как объявление кодировки

"Рекомендуемые формы этого выражения:

# -*- coding: <encoding-name> -*-

который распознается также GNU Emacs и

# vim:fileencoding=<encoding-name>

который признан Bram Moolenaars VIM.

Итак, вы можете поставить почти что угодно до "кодирования", но придерживайтесь "кодирования" (без префикса), если вы хотите быть на 100% совместимым с python-docs-рекомендацией.

В частности, вам нужно использовать все, что распознается Python и конкретным программным обеспечением для редактирования, которое вы используете (если оно вообще нуждается/принимает что-либо). Например. форма coding распознается (из коробки) GNU Emacs, но не Vim (да, без универсального соглашения, это по существу turf war).

Ответ 2

PEP 263:

первая или вторая строка должна совпадать регулярный     выражение "кодирование [: =]\s * ([-\w.] +)"

Очевидно, что соответствует "en кодировка: UTF-8".

PEP содержит несколько примеров:

      #!/usr/bin/python
      # vim: set fileencoding=<encoding name> :

 

      # This Python file uses the following encoding: utf-8
      import os, sys

Ответ 3

Просто скопируйте вставку ниже инструкции в верхней части вашей программы. Он будет решать проблемы с кодировкой символов.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

Ответ 4

Если я не ошибаюсь, исходное предложение для кодировок исходного файла должно было использовать регулярное выражение для первых двух строк, что позволило бы оба.

Я думаю, что регулярное выражение было чем-то вроде coding:, за которым следует что-то.

Я нашел это: http://www.python.org/dev/peps/pep-0263/ Это оригинальное предложение, но я не могу найти окончательную спецификацию, в которой точно указано, что они сделали.

Я, конечно, использовал encoding:, чтобы, конечно, работать.

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

Ответ 5

Я подозреваю, что это похоже на Ruby - любой метод в порядке.

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

С Ruby, если первый или второй, если есть строка shebang, содержит строку, которая соответствует:

coding: encoding-name

и игнорируя любые пробелы и другие пушицы на этих линиях. (Это может часто быть a = вместо:, тоже).

Ответ 6

У меня была такая же проблема и она была решена, добавив это в начало моего python script:

# coding=utf-8