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.


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.


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


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.