Python recognizes the following as instruction which defines file's encoding:
# -*- coding: utf-8 -*-
I definitely saw this kind of instructions before (-*- var: value -*-
). Where does it come from? What is the full specification, e.g. can the value include spaces, special symbols, newlines, even -*-
itself?
My program will be writing plain text files and I'd like to include some metadata in them using this format.
# coding: utf-8
# coding: utf8
works out of the box with Python 2.7, even outside of PyCharm. (I use SublimeText).
This way of specifying the encoding of a Python file comes from PEP 0263 - Defining Python Source Code Encodings.
It is also recognized by GNU Emacs (see Python Language Reference, 2.1.4 Encoding declarations), though I don't know if it was the first program to use that syntax.
# -*- coding: utf-8 -*-
is a Python 2 thing.
In Python 3.0+ the default encoding of source files is already UTF-8 so you can safely delete that line, because unless it says something other than some variation of "utf-8
", it has no effect. See Should I use encoding declaration in Python 3?
pyupgrade
is a tool you can run on your code to remove those comments and other useless leftovers from Python 2, like having all your classes inherit from object
.
This is so called file local variables, that are understood by Emacs and set correspondingly. See corresponding section in Emacs manual - you can define them either in header or in footer of file
In PyCharm, I'd leave it out. It turns off the UTF-8 indicator at the bottom with a warning that the encoding is hard-coded. Don't think you need the PyCharm comment mentioned above.
test1 = 'äöü'
it will hint you to add such a headder to the file. (pycharm 2019.1)
Success story sharing