Следует ли использовать объявление кодировки в Python 3?

114

Python 3 по умолчанию использует кодировку UTF-8 для файлов исходного кода. Следует ли мне по-прежнему использовать объявление кодировки в начале каждого исходного файла? подобно# -*- coding: utf-8 -*-

Матеуш Ягелло
источник

Ответы:

112

Поскольку по умолчанию используется UTF-8, вам нужно использовать это объявление только тогда, когда вы отклоняетесь от значения по умолчанию или если вы полагаетесь на другие инструменты (например, вашу IDE или текстовый редактор) для использования этой информации.

Другими словами, что касается Python , только когда вы хотите использовать другую кодировку, вы должны использовать это объявление.

Другие инструменты, такие как ваш редактор, могут поддерживать аналогичный синтаксис, поэтому спецификация PEP 263 допускает значительную гибкость синтаксиса (это должен быть комментарий, текст codingдолжен быть там, за которым следует либо символ :или =и необязательный пробел, с последующим признанным кодеком).

Обратите внимание, что это относится только к тому, как Python читает исходный код . Это не относится к выполнению этого кода, то есть к тому, как печать, открытие файлов или любые другие операции ввода-вывода переводятся между байтами и Unicode. Для получения более подробной информации о Python, Unicode и кодировках я настоятельно рекомендую вам прочитать Python Unicode HOWTO или очень подробный доклад Неда Батчелдера по Pragmatic Unicode .

Мартейн Питерс
источник
28
# -*- coding: utf-8 -*-По- прежнему может быть полезным для некоторых редакторов , чтобы перейти к ожидаемому кодирующая при редактировании исходного файла.
pepr
1
@pepr Знак порядка байтов может сделать то же самое, не так ли?
endolith
12
@endolith: спецификация UTF-8 - это мерзость на этой земле,
Мартин Питерс
1
@MartijnPieters Кажется, ваша ссылка с вами не согласуется
endolith
2
@endolith: нет, статья WP только резюмирует предысторию, я лично считаю, что это мерзость. Задача спецификации - записать порядок байтов (отсюда и название - метка порядка байтов). В UTF-8 нет путаницы с порядком байтов, эта функция есть только в UTF-16 и UTF-32. Значение уже представляет собой перенаправленный символ пробела нулевой ширины без разрыва (удобно, так как случайная печать затем заканчивается полностью невидимым выводом), повторное использование этого значения в качестве магической константы, на мой взгляд, неверно.
Martijn Pieters
6

Нет, если:

  • весь проект использует только значение UTF-8по умолчанию.
  • и вы уверены, что вашему средству IDE не требуется это объявление кодировки в каждом файле.

Да, если

  • ваш проект полагается на другую кодировку
  • или полагается на множество кодировок.

Для проектов с несколькими кодировками:

Если некоторые файлы закодированы в non-utf-8, то даже для них, UTF-8вы должны добавить объявление кодировки, потому что золотое правилоExplicit is better than implicit.

Ссылка:

  • PyCharm не нуждается в этом объявлении:

настройка кодировки для конкретного файла в pycharm

  • vim не нужно это объявление, но:
# vim: set fileencoding=<encoding name> :
Славомир Ленарт
источник