Where does this come from: -*- coding: utf-8 -*-

PythonFileTextEncodingEmacs

Python Problem Overview


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.

Python Solutions


Solution 1 - Python

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.

Solution 2 - Python

# -*- 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 "uft-8", it has no effect. See https://stackoverflow.com/q/14083111/3064538


pyupgrade is a tool you can run on your code to remove those comments and other no-longer-useful leftovers from Python 2, like having all your classes inherit from object.

Solution 3 - Python

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

Solution 4 - Python

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.

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
QuestionhamstergeneView Question on Stackoverflow
Solution 1 - PythonAndrea SpadacciniView Answer on Stackoverflow
Solution 2 - PythonBoris VerkhovskiyView Answer on Stackoverflow
Solution 3 - PythonAlex OttView Answer on Stackoverflow
Solution 4 - Pythoncwp393View Answer on Stackoverflow