De onde isso vem: - * - codificação: utf-8 - * -
Python reconhece o seguinte como instrução que define a codificação do arquivo:
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.
python file text encoding emacs
Isso é mais fácil de lembrar e funciona no meu editor, PyCharm. # coding: utf-8
Usar # coding: utf8funciona imediatamente com o Python 2.7, mesmo fora do PyCharm. (Eu uso o SublimeText).
Variável local de arquivo no Emacs , cookie no SciTE , declarações de codificação em Python e Modeline no Vim .
@ 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.
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
Pelo que posso concluir no manual do Emacs, valor pode ser qualquer expressão LISP, particularmente uma sequência de aspas duplas
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
# -*- coding: utf-8 -*-é uma coisa do Python 2. No Python 3+, a codificação padrão dos arquivos de origem já é UTF-8 e essa linha é inútil.
Consulte: Devo usar a declaração de codificação no Python 3?
pyupgradeé uma ferramenta na qual você pode executar seu código para remover esses comentários e outras sobras não úteis do Python 2, como herdar todas as suas classes object.
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
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/…
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
na verdade, se eu colocar uma linha como test1 = 'äöü'essa, sugerirá que você adicione esse cabeçalho ao arquivo. (pycharm 2019.1)