Чи варто використовувати декларацію кодування в 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 або дуже ретельною прагматичною розмовою Unicode від Неда Батчелдера.


28
Можливо, # -*- coding: utf-8 -*-деякі редактори можуть бути корисними для переходу до очікуваного кодування під час редагування вихідного файлу.
pepr

1
@pepr Марка порядку байт може зробити те саме, ні?
ендоліт

12
@endolith: UTF-8 BOM - це гидота на цій землі, спричинена Microsoft .. Див. en.wikipedia.org/wiki/Byte_order_mark#UTF-8
Martijn Pieters

1
@MartijnPieters Схоже, ваше посилання не згодне з вами
endolith

2
@endolith: ні, стаття WP лише узагальнює передумови, на мою власну думку, це гидота. Суть BOM полягає в записі порядку байтів (звідси назва, Byte Order Mark). У 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> :
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.