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