PEP 263 определяет, как объявлять кодировку исходного кода Python.
Обычно первые 2 строки файла Python должны начинаться с:
#!/usr/bin/python
# -*- coding: <encoding name> -*-
Но я видел много файлов, начинающихся с:
#!/usr/bin/python
# -*- encoding: <encoding name> -*-
=> кодирование вместо кодирования .
Итак, как правильно объявить кодировку файла?
Разрешено ли кодирование, потому что используемое регулярное выражение лениво? Или это просто еще одна форма объявления кодировки файла?
Я задаю этот вопрос, потому что PEP не говорит о кодировании , он просто говорит о кодировании .
#!/usr/bin/env python
вместо#!/usr/bin/python
ascii
наUTF-8
. Для сравнения: Python 2.7 документации с питона 3.7 Docs . Это означает, что вы можете смело пропустить эту кодировку, если хотите указатьUTF-8
.Ответы:
Проверьте документы здесь :
«Если комментарий в первой или второй строке скрипта Python соответствует регулярному выражению
coding[=:]\s*([-\w.]+)
, этот комментарий обрабатывается как объявление кодировки»«Рекомендуемые формы этого выражения
которая признана также GNU Emacs, и
который признан VIM Брэма Муленаара ".
Таким образом, вы можете поместить практически все что угодно перед частью «coding», но придерживайтесь «coding» (без префикса), если вы хотите быть на 100% совместимым с python-docs-рекомендациями.
Точнее говоря, вам нужно использовать все, что распознается Python и конкретное программное обеспечение для редактирования, которое вы используете (если оно нуждается / принимает что-либо вообще). Например,
coding
форма распознается (из коробки) GNU Emacs, но не Vim (да, без универсального соглашения, это по сути война за власть ).источник
-*-
?-*-
гарантирует , что линия признаваемый GNU Emacs (текстовый редактор популярным с некоторыми программистами). Обратите внимание, что, вопреки этому ответу, и форма Emacs, и форма Vim на 100% совместимы с python-docs-рекомендации (так как они оба соответствуют регулярному выражению regexp - «match», по давним соглашениям, означает «совпадать где угодно в строка ", в отличие от API Python).<prefix>-*- var: value[; ...] -*-
.ОПТОСОЗ 263:
Итак, «en coding: UTF-8 » соответствует.
PEP приводит несколько примеров:
источник
Просто скопируйте оператор вставки ниже в верхней части вашей программы. Это решит проблемы кодировки символов
источник
На сегодня - июнь 2018 г.
Сам PEP 263 упоминает следующее регулярное выражение:
Итак, как уже было указано в других ответах, он будет совпадать
coding
с любым префиксом, но если вы хотите быть PEP-совместимым, насколько это возможно (хотя, насколько я могу судить, использованиеencoding
вместоcoding
не нарушает PEP 263 в любом случае) - придерживайтесь «обычного»coding
, без префиксов.источник
Если я не ошибаюсь, первоначальное предложение для кодировок исходного файла состояло в том, чтобы использовать регулярное выражение для первых двух строк, что позволило бы использовать оба.
Я думаю, что регулярное выражение было чем-то вроде того,
coding:
за которым следовало что-то.Я нашел это: http://www.python.org/dev/peps/pep-0263/ Это оригинальное предложение, но я не могу найти окончательную спецификацию, в которой точно указано, что они сделали.
Я, конечно, привыкла
encoding:
к большому эффекту, так что, очевидно, это работает.Попробуйте перейти на что-то совершенно другое, например,
duhcoding: ...
посмотреть, работает ли это так же хорошо.источник
Я подозреваю, что это похоже на Ruby - любой метод в порядке.
Во многом это связано с тем, что разные текстовые редакторы используют разные методы (т. Е. Эти два) маркировки кодировки.
В Ruby, если первая или вторая, если есть строка shebang, содержит строку, которая соответствует:
и игнорируя любые пробелы и другие пух на этих линиях. (Часто это может быть также и = =).
источник