Python: Declarar a codificação dos fontes (encoding)

Palavras-chave: Python, encoding, iso-8859-1, latin-1, utf-8, unicode, DeprecationWarning

Quando você coloca algum caractere acentuado no seu programa, por exemplo “á”, um aviso é mostrado na execução:

sys:1: DeprecationWarning: Non-ASCII character ‘\xe1’ in file foo.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

A codificação ASCII é o padrão para códigos fonte, então é preciso avisar o Python que seus fontes usam outra. Para o português é ISO-8859-1, ou seu similar mais curto latin-1. Basta colocar um comentário especial na primeira ou segunda linha do código:

# -*- coding: latin-1 -*-

Apesar de encorajado seu uso pela documentação, os -*- são desnecessários. Exemplo funcional:

# coding: latin-1
print "á"

Sistemas e editores atuais vêm configurados com a codificação UTF-8, que abrange a maioria dos idiomas existentes. Se este for seu caso, use:

# coding: utf-8
This entry was posted in Python. Bookmark the permalink.

6 Responses to Python: Declarar a codificação dos fontes (encoding)

  1. eljunior says:

    ” pra quem usa vim, dá pra botar isso no vimrc…
    ” (se alguem souber jeito melhor de por a codificação no vim, help is welcome)
    let b:enc =substitute(v:ctype,”[^.]*\.”,””,””)
    autocmd BufNewFile *.py put= ‘# -*- coding: ‘ . b:enc . ‘ -*-‘

  2. Felipe says:

    É claro que deveria ser mencionado UTF-8…

  3. Você ainda usa iso-8859-1 e não utf-8?

    Como “você” quero dizer “você e o sistema operacional/editor/ambiente/whatever que você usa”. Tem distribuições que já tentam usar utf-8 por default em tudo, então é importante primeiro ter certeza de qual encoding está sendo utilizado nos arquivos que você está escrevendo, para saber se tem que colocar “iso-8859-1” ou “utf-8” no seu arquivo.

  4. Sim, ainda uso 8859, isso é crime? :)

    Felipe, Eduardo, valeu pelo aviso, atualizei o texto.

  5. LES says:

    Eu também uso iso-8859-1 e nem penso em mudar. É um padrão corrente e muito difundido. Não vai mudar assim, de uma hora pra outra. Tem resolvido todos os meus problemas.

  6. Alexis says:

    E eu sou outro que uso, as distribuições que tentam usar o utf-8 por padrão não são todas, e também isso não depende só de distribuições, os programas em geral também tem culpa nisso…

    De qualquer jeito, colocando utf, ou iso, o script (quase sempre) funciona, só quem lê vai ter o trabalho de escolher um editor que suporte.

Leave a Reply

Your email address will not be published. Required fields are marked *