Devo usar a declaração de codificação em Python 3?


114

Python 3 usa codificação UTF-8 para arquivos de código-fonte por padrão. Ainda devo usar a declaração de codificação no início de cada arquivo de origem? Gostar# -*- coding: utf-8 -*-

Respostas:


112

Como o padrão é UTF-8, você só precisa usar essa declaração quando se desviar do padrão ou se depender de outras ferramentas (como seu IDE ou editor de texto) para fazer uso dessas informações.

Em outras palavras, no que diz respeito ao Python , somente quando você deseja usar uma codificação diferente, é necessário usar essa declaração.

Outras ferramentas, como o seu editor, podem suportar sintaxe semelhante, e é por isso que a especificação PEP 263 permite uma flexibilidade considerável na sintaxe (deve ser um comentário, o texto codingdeve estar lá, seguido por um caractere :ou =e um espaço em branco opcional, seguido por um codec reconhecido).

Observe que isso se aplica apenas à forma como o Python lê o código-fonte . Não se aplica à execução desse código, portanto, não à maneira como imprimir, abrir arquivos ou qualquer outra operação de E / S é convertida entre bytes e Unicode. Para mais detalhes sobre Python, Unicode e codificações, eu recomendo fortemente que você leia o Python Unicode HOWTO , ou a palestra Pragmatic Unicode de Ned Batchelder.


28
A # -*- coding: utf-8 -*-ainda pode ser útil para alguns editores para mudar para o esperado codificação ao editar o arquivo de origem.
pepr

1
@pepr Um Byte Order Mark poderia fazer o mesmo, não?
endolith

12
@endolith: o UTF-8 BOM é uma abominação nesta terra produzida pela Microsoft. Veja en.wikipedia.org/wiki/Byte_order_mark#UTF-8
Martijn Pieters

1
@MartijnPieters Seu link não parece concordar com você
endolith

2
@endolith: não, o artigo do WP apenas resume o pano de fundo, é minha opinião que é uma abominação. O objetivo de um BOM é registrar a ordem dos bytes (daí o nome, Byte Order Mark). Não há confusão de ordem de bytes em UTF-8, ele só tem essa função em UTF-16 e UTF-32. O valor já é um caractere de espaço sem quebra de largura zero reaproveitado (útil, pois a impressão acidental acaba com uma saída totalmente invisível), reutilizar isso como uma constante mágica é errado, na minha opinião.
Martijn Pieters

6

Não, se:

  • todo o projeto usa apenas o UTF-8, que é um padrão.
  • e você tem certeza de que sua ferramenta IDE não precisa dessa declaração de codificação em cada arquivo.

Sim se

  • seu projeto depende de codificação diferente
  • ou depende de muitas codificações.

Para projetos com várias codificações:

Se alguns arquivos estiverem codificados no non-utf-8, então mesmo para esses codificados UTF-8você deve adicionar a declaração de codificação também, porque a regra de ouro éExplicit is better than implicit.

Referência:

  • O PyCharm não precisa dessa declaração:

configurando a codificação para um arquivo específico no pycharm

  • O vim não precisa dessa declaração, mas:
# vim: set fileencoding=<encoding name> :
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.