De onde isso vem: - * - codificação: utf-8 - * -

135

Python reconhece o seguinte como instrução que define a codificação do arquivo:

# -*- coding: utf-8 -*-

Eu definitivamente vi esse tipo de instruções antes ( -*- var: value -*-). De onde isso vem? Qual é a especificação completa, por exemplo, o valor pode incluir espaços, símbolos especiais, novas linhas e até -*-ele próprio?

Meu programa estará escrevendo arquivos de texto sem formatação e eu gostaria de incluir alguns metadados neles usando este formato.

hamstergene
fonte
3
Isso é mais fácil de lembrar e funciona no meu editor, PyCharm. # coding: utf-8
crizCraig
2
Usar # coding: utf8funciona imediatamente com o Python 2.7, mesmo fora do PyCharm. (Eu uso o SublimeText).
#
1
@ CBhihe Esta questão não é sobre Python, não sobre o que a instrução faz ou como funciona. Ele está perguntando qual software pré-Python o inventou e se há mais do que apenas codificação de arquivos.
Hamstergene

Respostas:

89

Essa maneira de especificar a codificação de um arquivo Python vem do PEP 0263 - Definindo codificações de código fonte do Python .

Também é reconhecido pelo GNU Emacs (consulte Referência da linguagem Python, 2.1.4 Declarações de codificação ), embora eu não saiba se foi o primeiro programa a usar essa sintaxe.

Andrea Spadaccini
fonte
4
Pelo que posso concluir no manual do Emacs, valor pode ser qualquer expressão LISP, particularmente uma sequência de aspas duplas
hamstergene
Obrigado pelo link pep. Antes, eu tinha a impressão de que a diretiva era usada apenas pelo editor de texto. Até agora, eu nunca soube que o interpretador python realmente analisou o comentário se ele estiver presente nas duas primeiras linhas do arquivo.
umeboshi
8

Isso é chamado de variáveis ​​locais de arquivo, que são entendidas pelo Emacs e configuradas de forma correspondente. Veja a seção correspondente no manual do Emacs - você pode defini-los no cabeçalho ou no rodapé do arquivo

Alex Ott
fonte
Esse tipo específico de variável local do arquivo também é entendido pelo próprio interpretador Python, não apenas para editores de texto. stackoverflow.com/questions/41680533/…
Boris
4

No PyCharm, eu deixaria de fora. Ele apaga o indicador UTF-8 na parte inferior com um aviso de que a codificação é codificada. Não pense que você precisa do comentário sobre o PyCharm mencionado acima.

cwp393
fonte
na verdade, se eu colocar uma linha como test1 = 'äöü'essa, sugerirá que você adicione esse cabeçalho ao arquivo. (pycharm 2019.1)
Cutton Eye
@ Cut Eye é isso com Python 2 ou 3?
Boris