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
” 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 . ‘ -*-‘
É claro que deveria ser mencionado UTF-8…
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.
Sim, ainda uso 8859, isso é crime? :)
Felipe, Eduardo, valeu pelo aviso, atualizei o texto.
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.
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.