Should I use encoding declaration in Python 3?

PythonPython 3.xEncodingUtf 8

Python Problem Overview


Python 3 uses UTF-8 encoding for source-code files by default. Should I still use the encoding declaration at the beginning of every source file? Like # -*- coding: utf-8 -*-

Python Solutions


Solution 1 - Python

Because the default is UTF-8, you only need to use that declaration when you deviate from the default, or if you rely on other tools (like your IDE or text editor) to make use of that information.

In other words, as far as Python is concerned, only when you want to use an encoding that differs do you have to use that declaration.

Other tools, such as your editor, can support similar syntax, which is why the PEP 263 specification allows for considerable flexibility in the syntax (it must be a comment, the text coding must be there, followed by either a : or = character and optional whitespace, followed by a recognised codec).

Note that it only applies to how Python reads the source code. It doesn't apply to executing that code, so not to how printing, opening files, or any other I/O operations translate between bytes and Unicode. For more details on Python, Unicode, and encodings, I strongly urge you to read the Python Unicode HOWTO, or the very thorough Pragmatic Unicode talk by Ned Batchelder.

Solution 2 - Python

No, if:

  • entire project use only the UTF-8, which is a default.
  • and you're sure your IDE tool doesn't need that encoding declaration in each file.

Yes, if

  • your project relies on different encoding
  • or relies on many encodings.

For multi-encodings projects:

> If some files are encoded in the non-utf-8, then even for these > encoded in UTF-8 you should add encoding declaration too, because > the golden rule is Explicit is better than implicit.

Reference:

  • PyCharm doesn't need that declaration:

configuring encoding for specific file in pycharm

  • vim doesn't need that declaration, but:

> # vim: set fileencoding= :

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMateusz JagiełłoView Question on Stackoverflow
Solution 1 - PythonMartijn PietersView Answer on Stackoverflow
Solution 2 - PythonSławomir LenartView Answer on Stackoverflow