Не-ASCII символы в Python 2 Shebang - PullRequest
0 голосов
/ 14 мая 2018

Как говорит PEP 263 , Python 2 (в частности, 2.7 в моем случае) требует волшебной строки комментария для указания кодировки файла:

# -*- coding: utf-8 -*-

Без этого невозможновключить не-ASCII символы в файл.Возникает печально известная ошибка:

SyntaxError: Non-ASCII character '[…]' in file […] on line […], but no encoding declared; see http://python.org/dev/peps/pep-0263/

Однако, если не-ASCII-символ находится в пути интерпретатора shebang, магический комментарий не работает:

#!/Users/naïve/project/python2.7
# -*- coding: utf-8 -*-
print 'Hello.'

Это происходит, например,если вы создаете virtualenv в папке с путем, отличным от ASCII: создается много сценариев с шебангом, который нарушает сценарий.

Единственный обходной путь, который я могу придумать, состоит в том, чтобы связать папку с некоторымиASCII-единственный путь.Тогда можно изменить путь Шебанга на ASCII.Или в случае virtualenv для инициализации его из пути с символьной связью.

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

1 Ответ

0 голосов
/ 14 мая 2018

Если вы сохраните файл как utf-8-sig вместо utf-8, вам вообще не понадобится кодировка-cookie. То есть при сохранении файла используйте метку порядка байтов в юникоде.

В Python вы можете использовать utf-8-sig в качестве параметра кодирования. В VIM вы можете использовать :set bomb для явного сохранения файла с спецификацией.

...