Definindo a codificação em um código python

Imagino que você chegou até este artigo porque, ao executar seu código em python, obteve o seguinte erro:

SyntaxError: Non-ASCII character '\xc3' in file <arquivo> on line <numero de linha>, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

Sei que você está com um tanto de pressa para resolver seu problema; se é esse o caso, insira no seu código, na primeira ou segunda linha, o código abaixo:

# -*- coding: utf-8 -*-

Pronto, seu problema já deve estar resolvido.

Se tiver um pouquinho mais de tempo, vamos juntos tentar entender o que foi que aconteceu.

Primeiro vamos analisar a mensagem de erro. Meu inglês trôpego me permitiu chegar à seguinte tradução da mensagem de erro:

Erro de sintaxe: no arquivo <nome de arquivo.py>, na linha <numero da linha>, tem um caractere não ASCII ('\xc3'), mas não foi declarada nenhuma codificação de caracteres no seu arquivo fonte.

Dê uma olhadinha em http://www.python.org/peps/pep-0263.html para mais detalhes.

Bem, para nós que não somos bilíngües, qualquer tradução capenga vai bem, até mesmo a minha. 😉

Entendi que você colocou um caractere inexistente na tabela ASCII, usada pelo interpretador python ao analisar o código fonte, e esqueceu-se de avisar ao interpretador para usar outra tabela.

O link sugerido na mensagem de erro nos leva à pagina do Python Enhancement Proposals (PEPs) 0263 – pep-0263 (Propostas de Melhoria para o Python, na minha tradução).

Olhando nesta página, obtive as seguintes informações:

  • a pep-0263 propõe introduzir uma sintaxe para declarar a codificação usada no arquivo fonte.
  • na versão 2.1 do python, o único jeito de escrever ‘literais’ Unicode era ranheta demais.
  • neste ‘pep’ é proposto usar um comentário especial no topo da linha par indicar o ‘encoding’ usado.
  • o interpretador python irá usar ASCII como codificação se nenhuma outra for informada

O documento indica pelo menos três formas de se indicar a codificação:
# coding=<encoding name>

ou, (usando formatos reconhecidos pelos editores mais populares):

#!/usr/bin/python
# -*- coding: <encoding name> -*-

ou

#!/usr/bin/python
# vim: set fileencoding=<encoding name> :

Testei as três formas e funcionou – uso o editor gvim. Testei também substituir utf-8 por iso8859-1, e o interpretador não reclamou.

Anúncios

4 Respostas to “Definindo a codificação em um código python”

  1. Dicas aparentemente simples mas que fazem toda a diferença, muito obrigado por esta dica!!!!

  2. josimar camargo Says:

    Muito Obrigado ajudou muito””!!

  3. amigo estou enfrentando um problema parecido ao invés de \xc3 aparece \xe7 a seguir o restante do erro:
    Traceback (most recent call last):
    File “”, line 1, in
    import perguntas
    File “perguntas.py”, line 14
    SyntaxError: Non-ASCII character ‘\xe7’ in file perguntas.py on line 14, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

  4. tailer teilor Says:

    isso é muito útil.
    Estou aprendendo sozinho, sem ninguém para ajudar.
    Quando começou a aparecer esse erro, quase chorei de raiva.
    Muito obrigado por resolver meu problema

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: